错误日志:
[2018-10-25 15:53:46 #18031.8] ERROR swServer_master_onAccept (ERROR 502): accept() failed. Error: Too many open files[24]
$ lsof
php 18031 dev 2228u sock 0,6 0t0 22568618 can't identify protocol
php 18031 dev 2229u sock 0,6 0t0 22568628 can't identify protocol
php 18031 dev 2230u sock 0,6 0t0 22568639 can't identify protocol
strace -p 18031
accept4(3, 0x7ffead354820, [116], SOCK_CLOEXEC|SOCK_NONBLOCK) = -1 EMFILE (Too many open files)
通用解决方案 ulimit -n
调整参数
出现bug
的原因也是sock
文件开启过多
问题环境介绍:
阿里云连接 AWS 数据库ip端口映射地址 (非常慢)
数据库连接或调用抛出异常就会重连, 弱网环境死循环.
服务启动大概2-4小时候文件开启数达到上限.....
修改代码重启至今未出现相同场景
先监控把 以后有问题本文会持续更新
问题已找到
[2018-11-02 15:21:48 #17293.8] ERROR swServer_master_onAccept (ERROR 502): accept() failed. Error: Too many open files[24]
因为业务需要将用户固定worker_id, 使用 dispatch_func 参数 在调度线程下
dispatch_func return -1 导致问题出现, -1 表示 master/manage 进程 , 阿里云环境存在无响应头的请求包
经过测试 在 Server Start 和 Manage Start 启动时 打印worker_id 返回的都是 -1