Too many open files 问题分析和解决
Linux中所有的事物或资源都是以文件的形式存在,比如消息、共享内存、连接等,句柄可以理解为指向这些文件的指针。对于这些句柄,Linux是有数量限制的,单个进程默认可以打开的句柄数上限,可以用以下命令来查看
排查步驟:
1. 查询当前进程使用的文件描述符数
lsof -p 14854 | wc -l
或者
ls -l /proc/14854/fd |wc -l
2. 查询当前进程,以及系统进程限制的文件描述符数,对比系统和进程的文件描述符限制数量,进行扩容
cat /proc/31531/limits
解释:31531为要查询的进程PID
- 查看系统进程open files数
ulimit -a
- 若系统文件描述符限制值较小,可加大系统进程openfile数
vim /etc/security/limits.conf
- 修改完成重新登录一下该用户,然后再查询
解释:soft是警告,hard是硬限制 ; *表示针对所有用户
cat >> /etc/security/limits.conf << EOF
root soft nofile 65535
root hard nofile 65535
* soft nofile 25535
* hard nofile 25535
EOF
*
代表对所有用户有效,若仅想针对某个用户,可替换星号。soft
即软限制,它只是一个警告值。hard
代表硬限制,是一个真正意义的阈值,超过就会报错。nofile
表示打开文件的最大数量。