在出现Too many open files问题后,最大的可能是打开的文件或是socket没有正常关闭。为了定位问题是否由Java进程引起,通过Java进程号查看当前进程占用文件描述符情况:
# 每个文件描述符的具体属性
lsof -p $java_pid
# 当前Java进程file descriptor table中FD的总量
lsof -p $java_pid | wc -l
sudo lsof -p 76323 | wc -l
检查程序问题:
如果你对你的程序有一定的解的话,应该对程序打开文件数(链接数)上限有一定的估算,如果感觉数字异常,请使用第一步的
lsof -p 进程id > openfiles.log命令
lsof -p 76323 > openfiles.log
,
获得当前占用句柄的全部详情进行分析,
1)打开的这些文件是不是都是必要的?
2)定位到打开这些文件的代码
3)是否程序操作了文件写入,但是没有进行正常关闭
4)是否程序进行了通讯,但是没有正常关闭(也就是没有超时结束的机制)
数据库连接
lsof -p 94161 | grep mysql | wc -l
网友评论