• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-02-28) 12次浏览 已收录 0个评论

如果在 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. supervisorminfds
  3. systemdLimitNOFILE

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:解决-Swoole-服务报错-Too-many-open-files-文件句柄超出系统限制

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址