一次 Too many open files 的问题排查

梦康 2024-05-19 23:54:37 242

前段时间有个朋友截图,服务器出现 Too many open files 的问题
这个错呢很常见,一般就是打开的文件描述达到上限了,但是这个情况我我之前也没遇到过。

问题排查

1、查看系统级别的文件描述符限制:确认系统级别的文件描述符限制,可以通过运行以下命令来查看:

ulimit -n

发现上限很高,为 655350
2、查看当前进程到底使用了多少文件描述符

lsof -p {PID}|wc -l

发现处于阻塞状态,之前我没遇到过此类情况。如果你也遇到了,可以尝试换一个命令

ls /proc/{PID}/fd|wc -l

一样的效果,发现值为 4096
3、检查进程级别的文件描述符限制:确认受影响的进程的文件描述符限制,可以通过以下命令查看:

cat /proc/{PID}/limits

发现也是 4096

原因定位

该服务的启动是通过 systemd 的方式启动,会有个 fd 默认值上限(4096),我自己写的 java 进程很少这样去启动。
如果继续维持 systemd 的方式启动,则只需要在配置文件中显性申明fd上限即可

[Service]
LimitNOFILE=655350