启动 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
, 这个抛错 算是比较常见.
网上流传的三种做法:
- 修改
ulimit
命令修改,这种修改只能在当前会话有效或者/etc/security/limits.conf
设置hard soft nofile
,可以一直有效 sysctl
修改fs.file-max
- 修改
/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
;
观察屏幕输出即可