php start.php status 输出进程级健康快照,含 worker_id、state(ok/busy/stopping)、connections、total_request、mem_usage 等关键字段,通过 Unix socket 通信,需注意残留文件与权限问题。

直接用 php start.php status 就能看到核心运行状态,不需要额外参数——这是最常用、最可靠的入口。
status 命令到底输出什么信息?
它不是“有没有在跑”的二值判断,而是给你一份进程级的健康快照。关键字段包括:
-
worker_id:每个 Worker 进程的编号,用于定位具体哪个进程异常 -
state:当前状态(ok/busy/stopping),busy持续高企说明该进程可能被阻塞或处理过慢 -
connections:当前活跃连接数,若长期接近Worker::$maxConnection配置值,大概率存在连接未释放或超时设置不合理 -
total_request:该进程累计处理请求数,增长停滞而其他进程正常 → 可能卡死、陷入死循环或 await 未 resolve -
mem_usage:单位 MB,突然飙升(比如从 15MB 跳到 80MB)往往意味着内存泄漏,尤其在使用全局缓存或未 unset 大对象时
为什么加了 -d 守护进程后还能查状态?
因为 status 命令默认通过 Unix socket(/tmp/workerman.status)与主进程通信,不依赖终端会话。只要主进程活着、socket 文件没被误删,就一定能查到。
- 常见坑:
stop后再start -d,但旧的.status文件残留 →status报错或显示僵尸进程。解决:手动清理/tmp/workerman.*.status* - 权限问题:如果用
root启动,非 root 用户执行status会失败。建议统一用业务用户启动,或改Worker::$pidFile和状态目录权限 - 注意:不是所有 Workerman 版本都支持无参
status;Workerman --status,但现代项目基本不用
connections 命令和 status 的区别在哪?
php start.php connections 是更细粒度的诊断工具,只在 Workerman ≥ 3.5.0 可用,它不显示进程负载,而是列出每条连接的原始元数据:
- 每行对应一个 TCP 连接,含
connection_id、from_ip、send_queue_size(待发数据量)、last_send_time - 若大量连接的
send_queue_size > 0且last_send_time很久没更新 → 客户端断连但服务端未检测到(心跳缺失或Worker::$connectionTimeout设得过大) - 该命令输出较重,线上慎用;高峰期执行可能短暂阻塞主进程,建议先在低峰试跑
真正难的不是查状态,而是读懂状态背后的行为逻辑——比如 connections 数稳定在 200,但 total_request 几乎不动,这时候看日志比看数字管用;又比如 mem_usage 缓慢爬升,得结合 memory_get_usage(true) 在代码里打点才能确认是不是你自己 hold 住了资源。










