能执行 php start.php status 并返回含 connections、total_request、mem_usage、state 的有效表格,说明 workerman 已成功运行;它通过 unix socket 读取共享内存统计信息,比 ps 更可靠,但依赖 -d 模式、正确 pid 文件路径及 socket 权限。

php start.php status 是 Workerman 5.2.3 安装后查看运行状态的标准且唯一推荐方式,无需额外安装或配置插件。它直接读取主进程共享内存中的实时统计值,低干扰、高可信,是线上环境判断服务是否健康的核心入口。
✅ 正确使用前提(三步必须确认)
启动时加
-d参数:php start.php start -d
不带-d是前台调试模式,不会创建管理 socket,status必然失败。*确保 `/tmp/workerman..status
文件存在且可读**: 默认路径为/tmp/workerman.status(或带 worker 名的变体,如/tmp/workerman.ChatGateway.status)。 若 stop 后再 start -d 报错,大概率是旧文件残留 → 执行rm /tmp/workerman..status` 清理。启动用户与执行 status 的用户一致:
比如用www用户启动,就用www执行php start.php status;若用 root 启动,普通用户执行会因权限被拒。
? status 命令输出关键字段怎么看
| 字段 | 含义 | 健康信号 | 风险信号 |
|---|---|---|---|
connections |
当前活跃连接数 | 有波动(随客户端接入/断开变化) | 长期接近 Worker::$maxConnection(如设 1000,常驻 980+)→ 连接未释放或心跳缺失 |
total_request |
该 worker 累计处理请求数 | 缓慢但持续增长(哪怕每秒 1–2 次) | 完全停滞,而其他 worker 正常增长 → 可能卡死在 onMessage 或异常未捕获 |
mem_usage(MB) |
当前内存占用 | 稳定在几 MB~几十 MB(如 12–45 MB 区间小幅浮动) | 缓慢爬升(2h 从 20→70 MB)→ 内存泄漏;突增(15→90 MB)→ 大对象未 unset 或全局缓存失控 |
state |
进程状态(ok / busy / stopping) | 多数为 ok,偶发短暂 busy( |
busy 持续 >30 秒 → 同步阻塞(如 file_get_contents、PDO 查询无超时、curl 同步调用) |
⚠️ 注意:
state=busy不等于“出问题”,要看持续时间;短时 busy 是正常业务处理,长期 busy 才需介入。
❌ 常见报错及快速修复
No pid file
→ 服务根本没启动,或启动时漏了-d。重试:php start.php start -dCan not connect to master process或Permission denied
→ socket 文件权限不对。检查/tmp/workerman.*.status*属主是否匹配当前执行用户;或统一改用业务用户启动。输出为空或只有表头
→connections=0且total_request=0长时间不动 → 检查onMessage回调是否抛了未捕获异常(Workerman 会静默终止该 worker 接收新请求)。
? 补充诊断:什么时候用 connections 命令?
php start.php connections 是可选辅助命令,仅在以下情况启用:
- Workerman ≥ 3.5.0(5.2.3 完全支持)
- 你用的是 TCP/UDP Worker(HTTP/WebSocket 默认不开启连接级统计,需手动设置
$worker->connection_class = \Workerman\Connection\TcpConnection::class;) - 目标是排查:客户端假死、send_queue_size 堆积、close_wait 连接堆积等网络层问题
⚠️ 线上慎用:高峰期执行可能短暂卡住主进程。建议先低峰执行,配合
head -50或grep "send_queue_size>0"过滤。
status 命令本身不依赖版本号显式声明(5.2.3 已完全兼容无参 status),也不需要 --status 或 workerman --status 等旧式写法。只要满足守护进程、socket 可达、权限正确,一行命令就能拿到真实快照。











