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

简介: 如果在 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
目录
相关文章
|
Windows
已解决Win11报错 OSError: [WinError 1455] 页面文件太小,无法完成操作。
Win11报错 OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading "D:\aaaa\envs\gs\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll" or one of its dependencies.
3294 0
已解决Win11报错 OSError: [WinError 1455] 页面文件太小,无法完成操作。
|
1月前
|
并行计算 PyTorch 算法框架/工具
OSError: [WinError 1455] 页面文件太小,无法完成操作如何解决。
如何解决Windows系统中出现的"OSError: [WinError 1455] 页面文件太小,无法完成操作"的错误。文章提供了具体的解决步骤。
53 0
OSError: [WinError 1455] 页面文件太小,无法完成操作如何解决。
|
计算机视觉 Windows
【解决方案】OSError: [WinError 1455] 页面文件太小,无法完成操作
今天在windows系统下调试yolov5,遇到的一个bug,特此记录,并附上解决方案,请往下看。
【解决方案】OSError: [WinError 1455] 页面文件太小,无法完成操作
|
JavaScript
Error: EMFILE: too many open files, watch 报错的解决方法
Error: EMFILE: too many open files, watch 报错的解决方法
690 1
|
Linux 开发工具
Too many open files 解决办法
还在等什么,快来一起讨论关注吧,公众号【八点半技术站】,欢迎加入社群
|
PHP
php proc_open子进程无法请求网络
php proc_open子进程无法请求网络
104 0
|
Linux 编译器 C语言
Linux动态库常见问题之-"cannot open shared object file No such file or directory"的解决办法
Linux编写程序时,会经常的接触动态库,而在程序运行时可能会遇到类似于:libxxx.so cannot open shared object file No such file or directory的问题,这个代表什么含义,该怎么解决呢?
1132 0
|
网络协议 安全 Linux
解决 Swoole 服务报错 Too many open files 文件句柄超出系统限制
如果在 Swoole 的日志中遇到了 `Too many open files` 这种报错,不要慌,在开发 TCP 网络应用的过程中,经常会遇到`Too many open files`这个问题。
365 0
解决 Swoole 服务报错 Too many open files 文件句柄超出系统限制