最近遇到一个问题,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
_