PHP项目PHP进程如何查看管控

wen PHP项目 23

本文目录导读:

PHP项目PHP进程如何查看管控

  1. 最常用的命令行查看与管控方法
  2. 生产环境中的专用监控工具
  3. 常见问题与应对
  4. 推荐给PHP开发者的简化方案

在PHP项目中,管理和查看PHP进程主要涉及三种场景:开发环境调试FPM(FastCGI进程管理器)池管理作为常驻守护进程的脚本,下面从最常用的命令行工具和可视化面板两个方面来详细说明。

最常用的命令行查看与管控方法

无论哪种PHP运行模式,pstopkill 系列命令是基础。

查看所有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_childrenkill -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等),可以再补充具体细节。

抱歉,评论功能暂时关闭!