当进程打开现有文件或创建新文件时,会受到文件描述符的限制。
Linux系统中经常出现错误too many open files
,说明你打开的文件数量超过文件描述符的限制。
查看文件描述符大小:
[root@centos7-190:mysql]$ ulimit -n1024
修改文件描述符大小:
方法1,只对当前session有效:
ulimit -HSn 62235
方法2,永久有效:
在/etc/security/limits.conf加入
* - nofile 65535
内核参数对文件描述符也有限制,文件描述符的值不能大于内核的限制。
查看内核参数中文件描述符的值
[root@centos7-190:mysql]$ sysctl -a | grep file-maxfs.file-max = 1024
修改内核参数:
sysctl -w fs.file-max=65535
在实际开发中,如果你的应用出现“too many open files”的错误,要优先考虑你的程序中是否有打开过多文件而没有及时释放资源,其次再考虑修改文件描述符和系统内核参数。
我们可以使用lsof命令查看某个进程到底打开了多少个文件
lsof -p 进程号