關於 workerman status 的 procress 數量

msig

我開了 5 個 procress , 可是有時 run 了一些時間後 , status 只看得到 4 個 procress (如下所示)
而我去作業系統看 , 5 個 procress 是都存在的 ,

請問一下 , status 看不到的那一個 procress 是不是死掉了, 還是它還是正常在執行 ,
不知是我哪邊沒寫好 , 還是 status 沒列出的那個 process 不影響功能正常執行 ,

我是怕如果 run 久一點 , process status 列出的數量是 0 了 , 是不是我就要 workermand restart 了

謝謝回覆啦 ~~~

WorkerMan version:2.0.1
start time:2014-11-09 11:14:34   run 0 days 0 hours
load average: 0.03, 0.06, 0.05
1 users          3 workers       7 processes
worker_name exit_status     exit_count
FileMonitor 0                0
Monitor     0                0
main        0                0
---------------------------------------PROCESS STATUS-------------------------------------------
pid     memory      listening           timestamp  worker_name total_request packet_err thunder_herd client_close send_fail throw_exception suc/total
17487   1.25M   udp://192.168.3.98:9912 1415502874        main 175              0           6            0            0         0               100%
17488   1.25M   udp://192.168.3.98:9912 1415502874        main 239              0           5            0            0         0               100%
17489   1.25M   udp://192.168.3.98:9912 1415502874        main 190              0           7            0            0         0               100%
17490   1.25M   udp://192.168.3.98:9912 1415502874        main 447              0          19            0            0         0               100%
阅读 3191
2个回答

walkor

workermand status
原理是Monitor进程向所有子进程发送一个SIGUSR1信号,子进程如果空闲(处于idle状态)就报告自己的运行状态(其实是将自己的状态写入消息队列,Monitor去读取然后展示)。

当子进程收到SIGUSR1信号的时刻,如果子进程正在忙于处理用户请求,则不会立刻报告状态,而是等到当前请求处理完毕再报告。运行 status命令等待子进程报告的超时时间为1秒,也就是如果有子进程超过1秒没上报,就不再等待。所以会看到有些进程没有在status展示。

所以总的来说,如果status少了几个进程,一般没太大关系。如果少了很多,说明workerman比较繁忙,或者进程被某种耗时的操作(如读取mysql等)卡住了。如果是被耗时的操作卡住(通常是阻塞在网络IO上,现象是系统负载很低),需要查明耗时原因,避免所有进程被卡住导致无法服务。如果workerman比较繁忙,看下系统资源(主要是cpu资源)是否还有剩余很多,如果资源还有很多,可以考虑加大进程数缓解压力。如果资源不够了服务器硬件已经到达瓶颈,则可以考虑扩容(增加机器)。

总结:
可以利用workermand status 能看到自己服务的运行健康状况,比如有多少进程在干活,有多少进程空闲,是否有进程长时间被IO阻塞等。
另外个人感觉msig开的进程数有点少,如果业务有操作数据库等网络资源,可以将进程数调整到cpu核数的5倍左右。另外最好也查下为什么有进程在1秒内都没有返回status结果,可能是数据库很慢导致进程卡着

  • 暂无评论
msig

ok , 了解了 , 感謝回覆 ~~~

我實際是開 40 個進程數啦 , 只是為了舉例方便 , show 成 開 5 個 ~~~

  • 暂无评论