最近遇到一个问题,WebSocket总是会在下午出现比较大的断开的量。

首先怀疑的是客户端的网络到服务端的网络出现抖动或者断开,要么就是入口的nginx有异常,或者是内部的服务出现异常。

排查下来,发现nginx的最大打开文件个数是1024

nginx master进程

nginx work进程

当进程打开文件数超过限制时,会发生什么?

当进程超过最大打开文件限制时,会收到SIGXFSZ信号。这个信号会默认行为会杀死一个进程。进程内部也可以捕获这个信号。

我试着向nginx wrok进程发送SIGXFSZ信号, work进程会退出,然后master监听了这个事件后,会重新启动一个work进程。

kill -XFSZ work_pid

在nginx的error.log文件中,可以看到类似的日志输出。

这里的25就是XFSZ信号的整数表示。

... [alert] ...#.: work process ... exited on signal 25 

_

参考