Too many open files 报错启发

最近生产环境的系统频繁崩溃,看日志都是这样的:
在这里插入图片描述
对于这样的问题,网上也有很多网友提供了解决办法:
原因主要有以下两个:
1、打开的 Socket 客户端并没有正常关闭,此处可能是自动超时功能有问题或者网络突然断开等。
2、Linux 默认设置的文件最大打开数太小,不够用。
在windows上运行是没有问题的,但是 Linux对进程的打开文件数是有限制的。
默认值是1024,可使用 ulimit -n 命令查看最大文件打开数
可用命令 ulimit -a 查看系统上受限资源的设置
对于并发量比较大的网站这个限制是有些捉襟见肘的,因此通过这个命令
ulimit -n 4096 可以增大打开文件数的限制

ulimit -n 4096 命令只能临时的改变 open files 的值,当重新登陆服务器后又会恢复1024

那么如何永久设置 open files 的值呢。
在 /etc/security/limits.conf 该文件的最后加入,最大文件打开数:

* soft nofile 65535  
* hard nofile 65535 

然后 /etc/pam.d/login 该文件的最后加入:

session required /lib/security/pam_limits.so 

重新登录后使用命令查看:ulimit -n,是否和设置保持一致
这样,这台服务器的最大文件打开数就永久设置为4096了。

那么问题来了,随着用户的日益增加,要一直往上增加文件打开数吗?
其实这才是我本篇博客想要强调的问题!!!
为什么同一时间打开的文件数会这么大?根本上很可能是因为我们的系统程序在操作完IO流后没有关闭。

以前,一直觉得 IO 流关不关也看不到有什么影响(也许是自己没学好,没学仔细),也就对 IO 流的关闭不够重视。因此,以此文提醒自己及各位没有对 IO 流关闭引起重视的人,以后记得好好关闭用完的 IO 流。

猜你喜欢

转载自blog.csdn.net/Alias_fa/article/details/97491333
今日推荐