本文目录导读:

在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等),可以再补充具体细节。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播