查看运行状态
从这以栏中我们可以看到
WorkerMan的版本version:3.0.3
启动时间2015-02-21 18:05:47
,运行了run 86 days 22 hours
服务器负载
3 workers
(3种进程,包括ChatGateway、ChatBusinessWorker、WebServer进程)
10 processes
(共10个进程)
(worker进程退出状态码)
exit_count
(该状态码的退出次数)
一般来说exit_status为0表示为正常退出,如果为其它值,代表进程是异常退出的,并产生一条类似WORKER EXIT UNEXPECTED
错误信息,错误信息会记录到Worker::logFile指定的文件中。
常见的exit_status及其含义如下:
- 9:表示进程被SIGKILL信号杀死了。这个退出码主要发生在stop以及reload平滑重启时,导致这个退出码的原因是由于子进程没有在规定时间内响应主进程reload信号(例如mysql、curl等长时间阻塞等待或者业务死循环等),被主进程强制使用SIGKILL信号杀死。注意,当在linux命令行中使用kill命令发送SIGKILL信号给子进程也会导致这个退出码。
- 65280:导致这个退出码的原因是业务代码有致命错误,例如调用了不存在的函数、语法错误等,具体错误信息会记录到指定的文件中,也可以在php.ini中指定的文件中(如果有指定的话)找到。
pid:进程pid
memory:该进程当前占用内存(不包括php自身可执行文件的占用的内存)
worker_name:该进程运行的服务服务名,见Worker类name属性
connections:该进程当前有多少个TCP连接对象实例。注意:每个客户端连接是一个连接对象实例,同时每个AsyncTcpConnection连接也是一个连接对象实例,所以connections的计数不一定与客户端连接数相等,例如GatewayWorker中Gateway进程的connections计数包含了客户端连接数和Gateway与Worker内部通讯连接数。
total_request:表示该进程从启动到现在一共接收了多少个请求。这里的请求数不仅包含客户端发来的请求,也包含Workerman内部通讯请求,例如GatewayWorker架构里Gateway与BusinessWorker之间的通讯请求。
send_fail:该进程向客户端发送数据失败次数,失败原因一般为客户端连接断开,此项不为0一般属于正常状态,参见
throw_exception:该进程内业务未捕获的异常数量
status脚本运行后,主进程会向所有worker进程发送一个信号,随后status脚本进入100毫秒的睡眠阶段,以便等待各个worker进程状态统计结果。这时空闲的worker进程收到SIGUSR2
信号后会立刻向特定的磁盘文件写入自己的运行状态(连接数、请求数等等),而正在处理业务逻辑的worker进程,则会等待业务逻辑处理完毕才会去写入自己的状态信息。sleep100毫秒后,status脚本开始读取磁盘中的状态文件,并展示结果到控制台。
出现这种问题需要排查业务代码,看哪里导业务致长时间阻塞,并且评估阻塞耗时是否在预期内。