我開了 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%
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结果,可能是数据库很慢导致进程卡着
ok , 了解了 , 感謝回覆 ~~~
我實際是開 40 個進程數啦 , 只是為了舉例方便 , show 成 開 5 個 ~~~