无名 发表于 2022-5-8 15:12:38

【WD】浅谈日志中记录 too many open files


日志中记录too many open files 字样,导致打开网站、开启服务失败的原因以及解决方案:
1、文件句柄是什么?
      百度百科:
在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件
2、为什么会报 too many open files?
默认情况下,Linux下默认的文件句柄是 1024,当服务器的并发高或者是打开的文件数量较多的时候,就会报 too many open files
查询:
ulimit-n
复制代码


3、如何解决
修改进程打开的文件数量

1、临时解决方案:
ulimit -n 204800
复制代码

此方法不用重启服务器,当前环境变量下,临时生效,重启服务器后,无效
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
复制代码

修改后,需要重启服务器,查看是否生效
ulimit -n
复制代码

上面修改的是一个进程打开的文件句柄数量,但是还需要修改系统的总限制才行。比如我们设置的每个进程打开文件句柄默认是1024个,但是系统限制的是500 ,最终一个进程打开的文件句柄数量也是 500
修改系统限制

1、临时解决方案:
echo6553560 > /proc/sys/fs/file-max
复制代码

2、永久解决方案,需要重启生效:
echo   fs.file-max = 6553560>> /etc/sysctl.conf
复制代码

查看是否生效:
sysctl -p
复制代码

知其然,也需知其所以然。如果您对本文有其他的建议和看法,请留言。

http://cdn.u1.huluxia.com/g4/M01/41/FA/rBAAdmHSUCuAN2RdAACM8CjkLhE189.jpghttp://cdn.u1.huluxia.com/g4/M01/41/FA/rBAAdmHSUCyAYYT1AAAhQUjisaQ013.png
页: [1]
查看完整版本: 【WD】浅谈日志中记录 too many open files