本文目录导读:

在PHP项目中,管理和查看PHP进程主要涉及三种场景:开发环境调试、FPM(FastCGI进程管理器)池管理、作为常驻守护进程的脚本,下面从最常用的命令行工具和可视化面板两个方面来详细说明。
最常用的命令行查看与管控方法
无论哪种PHP运行模式,ps、top、kill 系列命令是基础。
查看所有PHP相关进程
# 查看所有包含"php"的进程,显示完整命令行 ps aux | grep php # 或者使用 pgrep/pkill (更简洁) pgrep -a php # 显示进程ID和完整命令 pkill -f php # 按名称杀死所有php进程(慎用)
输出示例:
www-data 12345 0.0 0.5 ... php-fpm: pool www
user 23456 0.1 0.8 ... php /path/to/script.php
root 34567 0.0 0.2 ... php-fpm: master process
针对PHP-FPM的专用管理
PHP-FPM是生产环境最常用的方式,它自带管理命令。
# 查看FPM进程状态(需要先启用status页面或使用socket通信) # 方法1:通过信号 kill -USR2 $(pgrep php-fpm | head -1) # 输出状态到日志 # 方法2:使用第三方工具(推荐) # 安装 htop 或 glances apt install htop glances # 然后按 F5 树状查看,可看到 master -> worker 结构 # 更专业的FPM状态查看 php-fpm -t # 测试配置是否有效 php-fpm -y /etc/php/8.1/fpm/php-fpm.conf # 指定配置文件启动
查看FPM池的实时状态:
# 如果你的PHP-FPM启用了状态页(在www.conf中设置 pm.status_path = /status) curl http://localhost/status?full # 或者使用 unix socket curl --unix-socket /var/run/php/php8.1-fpm.sock http://localhost/status
FPM池的进程数控制与查看:
# 查看当前动态进程数 grep -E "active|idle|total" /proc/$(pgrep -f "php-fpm: pool" | head -1)/status 2>/dev/null # 修改后重载配置(不中断服务) kill -USR2 $(pgrep -f "php-fpm: master")
管理常驻PHP守护进程(如Swoole/Workerman)
这类脚本会持续运行,需要用更精细的方式管控。
# 启动命令示例 php worker.php start -d # 查看特定进程 ps aux | grep worker.php # 停止/重启(Swoole/Workerman自带信号处理) kill -SIGTERM $(pgrep -f worker.php) # 优雅停止 kill -SIGINT $(pgrep -f worker.php) # 强制停止 # 使用内置管理命令 php worker.php stop php worker.php reload # 热重载(仅限支持该特性的框架)
资源监控(CPU/内存/IO)
# 实时监控PHP进程资源 top -p $(pgrep -d',' php) # 或者使用 htop 按 F4 搜索 php # 查看每个PHP进程的内存占用 ps -eo pid,user,comm,rss,%mem --sort=-%mem | grep php # 查看PHP进程打开的句柄数 lsof -c php 2>/dev/null | wc -l
生产环境中的专用监控工具
PHP-FPM 状态页(零成本)
在 www.conf 中启用:
pm.status_path = /php-fpm-status ping.path = /ping ping.response = pong
curl http://your.domain/php-fpm-status?full
返回的关键指标:
active processes: 正在处理的请求数total processes: 总进程数idle processes: 空闲进程数max children reached: 是否达到最大进程限制(危险信号)
使用图形化工具
- htop/glances:按
F5树状显示,颜色区分进程状态。 - Prometheus + Node Exporter:配合
php-fpm-exporter采集FPM指标。 - Netdata:一键安装,自动发现PHP-FPM进程并展示详细图表。
日志分析
# FPM慢日志(定位性能瓶颈) tail -f /var/log/php8.1-fpm.log | grep -i "slow" # 错误日志 tail -100 /var/log/php8.1-fpm.log
常见问题与应对
| 场景 | 操作 | 命令示例 |
|---|---|---|
| 进程卡死/死循环 | 找到PID直接kill | kill -9 <PID> |
| 连接数打满 | 调整FPM配置后重载 | 调大 pm.max_children,kill -USR2 <master_pid> |
| 内存泄漏 | 重启池或单进程 | php-fpm -p /etc/php/8.1/fpm -R(注意会中断连接) |
| 脚本进程僵尸 | 使用 wait() 或 pcntl_signal |
ps aux | grep defunct |
| Swoole阻塞 | 检查协程状态 | php worker.php status |
推荐给PHP开发者的简化方案
如果你不想记太多命令,可以用一个脚本封装常用操作:
# 保存为 php-manager.sh
#!/bin/bash
case "$1" in
status)
ps aux | grep -E "php-fpm|php.*worker" | grep -v grep
echo "FPM状态:"
curl -s http://localhost/php-fpm-status 2>/dev/null | grep -E "active|idle|total"
;;
restart)
sudo systemctl restart php8.1-fpm
;;
kill-worker)
pkill -f "$2" && echo "已停止 $2 相关的进程"
;;
*)
echo "用法: $0 {status|restart|kill-worker}"
;;
esac
- 快速查看:
ps aux | grep php - 生产监控:FPM状态页 + 慢日志
- 资源管理:
top -p $(pgrep php)或 htop - 安全操作:优先使用
SIGTERM(信号15),SIGKILL(信号9)最后用
掌握这些基本就够日常运维了,如果你有特定的运行模式(如Swoole、Laravel Octane等),可以再补充具体细节。