日志中记录too many open files 字样,导致打开网站、开启服务失败的原因以及解决方案:
1、文件句柄是什么?
百度百科:
在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件
2、为什么会报 too many open files?
默认情况下,Linux下默认的文件句柄是 1024,当服务器的并发高或者是打开的文件数量较多的时候,就会报 too many open files
查询:
3、如何解决
修改进程打开的文件数量
1、临时解决方案:
此方法不用重启服务器,当前环境变量下,临时生效,重启服务器后,无效
2、永久解决,需要修改/etc/security/limits.conf 文件
- echo "* soft nofile 204800" >> /etc/security/limits.conf
- echo "* hard nofile 204800" >> /etc/security/limits.conf
- echo "* soft nproc 204800" >> /etc/security/limits.conf
- echo "* hard nproc 204800 " >> /etc/security/limits.conf
复制代码
修改后,需要重启服务器,查看是否生效
上面修改的是一个进程打开的文件句柄数量,但是还需要修改系统的总限制才行。比如我们设置的每个进程打开文件句柄默认是1024个,但是系统限制的是500 ,最终一个进程打开的文件句柄数量也是 500
修改系统限制
1、临时解决方案:
- echo 6553560 > /proc/sys/fs/file-max
复制代码
2、永久解决方案,需要重启生效:
- echo fs.file-max = 6553560 >> /etc/sysctl.conf
复制代码
查看是否生效:
知其然,也需知其所以然。如果您对本文有其他的建议和看法,请留言。
|
|