产生原因
从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如scoket),正在监听 的端口等等。所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。通过
ulimit -a可以查看当前系统设置的最大句柄数是多少?
open files那一行就代表系统目前允许单个进程打开的最大句柄数。
解决
1、先通过jps等其它方式找到要排查的进程
2、cat /proc/<PID>/limits,查看其设置的最大文件数是多少。
3、ls /proc/<PID>/fd,可以查看具体打开发什么东西。
4、经过上面查看,如果不是操作系统限制所致,可能是程序是使用网络连接时,没有正常关闭,或者使用文件时没有正常关闭。