Karp 的技术博客

错误日志:

[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

swoole

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2018年10月26日 04:22
6

目录

来自 《Swoole http 服务 Error: Too many open files[24]》