解决Swoole服务报错”Too many open files”文件句柄超出系统限制

Ourboke
Ourboke
Ourboke
16368
文章
148
评论
2022年1月11日10:52:32

如果在Swoole的日志中遇到了 Too many open files 这种报错,不要慌,在开发 TCP 网络应用的过程中,经常会遇到 Too many open files 这个问题。

这说明你的程序以达到 Linux 所允许的打开文件数上限。需要修改 ulimit 设置

可以使用 lsof 查看进程打开的文件句柄数:

# 将 PID 修改为你要检查的进程ID
lsof -p PID | wc -l

也可以去掉 | wc -l 来检查服务打开了那些文件句柄,未进行关闭。

可以使用 ulimit -n 查看当前设置为多少

[root@shenyan ~]# ulimit -n
100001

如果过小,需要进行调整,Swoole 文档中推荐 ulimit -n 要调整为 100000 甚至更大。

那么如何修改呢?

命令行下执行 ulimit -n 100000 即可修改。

但是需要注意,有时候这种修改方法仅当前终端有效,关闭或者重新开个一个终端就会恢复之前的设置。

这时就需要修改 /etc/security/limits.conf,加入

* soft nofile 262140
* hard nofile 262140
root soft nofile 262140
root hard nofile 262140
* soft core unlimited
* hard core unlimited
root soft core unlimited
root hard core unlimited

修改 limits.conf 文件后,需要重启系统生效。

这样操作完成以后,如果还是报错 Too many open files,那么就可以试试检查运行中的进程限制:

# 将 PID 修改为你要检查的进程ID
cat /proc/PID/limits

如果这里的 Max open files 过小,也是需要进行修改的。

这种情况大多数出现于使用 supervisor 等工具进行管理的时候,supervisor 启动服务默认的 minfds 配置是 1024,所以会出现 Too many open files。

使用 systemd 的话,也是同样的道理,需要修改 LimitNOFILE。如果不设置或者设置为 LimitNOFILE=unlimited(不识别),则默认为 1024。

而这里也要注意设置 LimitNOFILE=infinity 就等于 LimitNOFILE=65536,对于需求 10 万以上文件打开数的人,一定要自行设定。

综上所述,遇到 Too many open files 时的解决方法:

1. ulimit -n

2. supervisor:minfds

3. systemd:LimitNOFILE

Vue实现详情返回列表页记住滚动条位置 网站建设

Vue实现详情返回列表页记住滚动条位置

最近用 Vue 做移动端页面遇到一个问题,从列表页进入详情页,再返回到列表页,不管之前滚动到哪里,每次返回时都跳到列表最顶部。这样体验肯定不好,期望的应该是记住滚动条的位置,每次返回还是在原来的位置上...
Nginx开启gzip压缩的完整步骤记录 网站建设

Nginx开启gzip压缩的完整步骤记录

Nginx开启Gzip压缩功能,可以使网站的css、js 、xml、html文件在传输时进行压缩,提高访问速度,进而优化Nginx性能,下面这篇文章主要给大家介绍了关于nginx开启gzip压缩的相关...
python实现腾讯云轻量云流量超标自动关闭系统 网站建设

python实现腾讯云轻量云流量超标自动关闭系统

前几天在LOC上看到说良心云的轻量云流量超标后会额外扣超出的流量费,吓得我赶紧学着也弄了个脚本来监控轻量云,当流量超过自己设定的预警值后,自动关闭轻量云,避免超流量要付额外的流量钱。 但...