最近测试golang编写的server,发现并发数增加时候常常报错:
http: Accept error: accept tcp [::]:18888: accept4: too many open files; retrying in 1s
检查全局limit限制发现已经修改
[root@onlyellow2 ~]# ulimit -a
.....
open files (-n) 88888
.....
systemctl重启server后,查看实时limit
cat /proc/${server_pid}/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
...
Max open files 1024 1024 files
...
发现max open files依然被限制在1024
查询资料后确定原因:
systemctl启动的服务,会使用systemd配置文件内的limit参数
故修改方法有两种:
1. 修改systemd全局limit
/etc/systemd/system.conf
2. 修改单个服务limit
[Service]
...
LimitNOFILE=88888
LimitNPROC=88888
本文解决了一个在高并发环境下,Golang编写的服务器频繁遇到的too many open files错误。通过调整systemd服务配置,将文件描述符限制从默认的1024提升至88888,有效避免了并发处理中的资源限制问题。

2058

被折叠的 条评论
为什么被折叠?



