一次「Too many open files」故障

今天在做公司应用程序网关的性能压力测试时发现了一个问题,当并发请求数超过1000时,发现服务器日志里显示大量的 socket: too many open files 错误。

通过proc确认,发现应用程序的限制如下:

shell> cat /proc//limits

Limit                     Soft Limit          Hard Limit          Units
Max open files            1024                4096                files

问题看上去非常简单,根据以往经验,通常此类问题多半是由于操作系统限制所致,可是检查结果一切正常:

shell > cat /etc/security/limits.conf

* - nofile 51200

问题进入了死胡同,于是我开始在网上搜索答案,终于找到了这个问题.

我的程序是通过systemd启动成为守护进程的,而systemd会完全忽略/etc/security/limits*下的配置,要想提高打开文件数的限制,必须在/etc/systemd/system/.service服务配置文件中添加如下配置:

[Service]
LimitNOFILE=51200

修改完成后重启服务即可生效:

Limit                     Soft Limit          Hard Limit            Units
Max open files            51200                51200                files

你可能感兴趣的:(一次「Too many open files」故障)