Karp

[踩坑] Supervisor : Too many open files
启动 Swoole 服务后 : 异常抛错Fatal error: SwooleServer::start(): f...
扫描右侧二维码阅读全文
11
2022/05

[踩坑] Supervisor : Too many open files

启动 Swoole 服务后 : 异常抛错

Fatal error: SwooleServer::start(): failed to start server. Error:UnixSocket::UnixSocket(): socketpair() failed, Error: Too many open files[24]

上网找了下 前面关键字 UnixSocket::UnixSocket() , socketpair() failed, Too many open files

解决问题 还是在于 最后的 Too many open files, 这个抛错 算是比较常见.

你真知道“Too many open files”?

网上流传的三种做法:

  1. 修改ulimit命令修改,这种修改只能在当前会话有效或者/etc/security/limits.conf设置hard soft nofile,可以一直有效
  2. sysctl修改fs.file-max
  3. 修改/proc/sys/fs/nr_open(可选)

我的Swoole服务时使用 Supervisor 守护的. 在同一台服务器上, 手动启动服务没有抛错, 但使用 Supervisor 启动时就抛错了. 问题出在 Supervisor 的 最大文件句柄数 限制 是默认的 1024;

解决方法 之一 :

1.先,修改服务器系统的最大文件句柄数,(网上流传的三种做法);

2.在1的基础上,修改 Supervisor 启动时的 supervisord.conf 配置文件,在[supervisord] 栏目下添加:minfds={数字},比如下面这样:

[supervisord]
...
minfds=102400
...

3.重启 supervisor .

查看Supervisor下的服务文件句柄数

要看一个依赖 Supervisor 启动的服务实际所能打开的最大文件句柄数,不要靠 ulimit 系列命令,这个是看系统的。走下面的步骤查看:

ps 一下程序名称,比如:ps -ef|grep xxx
得到 xxx 的进程号:{PID}
cat /proc/{PID}/limits
观察屏幕输出即可

进程守护工具: Supervisor 启动下的服务,Too many open file 错误的限制

最后修改:2022 年 05 月 11 日 01 : 24 AM

发表评论