Swoole http 服务 Error: Too many open files[24]

错误日志: 
[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

详情请查看 Aws 迁移 阿里云 踩坑 (Too many open files[24])

发表新评论