网站打不开日志显示too many open files的解决方案

有时候我们会遇到网站没办法打开,找来找去不知道什么问题,查看网站的日志,发现日志中记录很多too many open files的字样,这是什么回事呢?其实这种情况会导致打开网站、开启服务失败,这里搬主题就给出网站打不开日志显示too many open files的解决方案。

文件句柄是什么

百度百科:

在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件

为什么会报 too many open files

默认情况下,Linux下默认的文件句柄是 1024,当服务器的并发高或者是打开的文件数量较多的时候,就会报 too many open files

查询:

ulimit  -n

解决方案

修改进程打开的文件数量

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、临时解决方案:

echo  6553560 > /proc/sys/fs/file-max

2、永久解决方案,需要重启生效:

echo   fs.file-max = 6553560  >> /etc/sysctl.conf

查看是否生效:

sysctl -p
千百度
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容