监控PHP-FPM性能需结合系统自带工具、PHP-FPM内置功能及第三方工具,覆盖实时状态、资源占用、瓶颈分析等场景。以下是具体方法:
systemctl命令快速确认PHP-FPM服务的运行状态、启动时间、重启次数等基础信息。sudo systemctl status php-fpm
top命令:通过-p参数指定PHP-FPM主进程PID(可通过pgrep php-fpm获取),实时查看CPU、内存占用。top -p $(pgrep php-fpm)
htop(需安装):更直观的交互式工具,支持颜色高亮和排序,安装后可直接运行htop,按F5查看进程树。sudo yum install htop -y && htop
ps命令过滤PHP-FPM进程,查看CPU、内存、运行时间等详细信息。ps aux | grep php-fpm
netstat(传统工具)或ss(更高效)查看连接状态。sudo yum install net-tools -y && netstat -tuln | grep php-fpm # Unix套接字或端口
ss -tuln | grep php-fpm
PHP-FPM自带的status功能可提供活跃进程数、闲置进程数、请求处理时间等关键指标,需先配置后访问。
/etc/php-fpm.d/www.conf),开启状态路径和权限。pm.status_path = /status # 状态路径
location ~ ^/status$ {
fastcgi_pass 127.0.0.1:9000; # PHP-FPM监听端口
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
allow 127.0.0.1; # 仅允许本地访问
deny all;
}
curl访问状态页。sudo systemctl restart php-fpm nginx
curl http://localhost/status
输出示例:pool: www
process manager: dynamic
active processes: 5
idle processes: 2
total processes: 7
max children reached: 0
slow requests: 0
php-fpm-exporter(如prometheus-php-fpm-exporter)采集PHP-FPM指标(如活跃进程、请求耗时),并存储到Prometheus。wget https://github.com/oliver006/redis_exporter/releases/download/v1.4.0/redis_exporter-v1.4.0.linux-amd64.tar.gz
tar -xzf redis_exporter-v1.4.0.linux-amd64.tar.gz
cd redis_exporter-v1.4.0.linux-amd64
./prometheus-php-fpm-exporter --phpfpm.scrape-uri="http://127.0.0.1/status"
/etc/zabbix/zabbix_agentd.d/php-fpm.conf):UserParameter=php-fpm.active_processes[*], curl -s http://127.0.0.1/status | grep 'active processes' | awk '{print $3}'
/var/log/php-fpm/error.log(路径取决于配置),分析PHP解析错误、超时等问题。sudo tail -f /var/log/php-fpm/error.log
slowlog = /var/log/php-fpm/slow.log # 慢日志路径
request_slowlog_timeout = 5s # 超过5秒视为慢请求
重启PHP-FPM后,通过tail或awk分析慢日志:sudo tail -f /var/log/php-fpm/slow.log
/var/log/nginx/access.log),分析高流量页面的性能表现(如请求量、响应时间),定位热点接口。pecl install xdebug
echo "zend_extension=/usr/lib64/php/modules/xdebug.so" >> /etc/php.ini
echo "xdebug.mode=profile" >> /etc/php.ini # 开启性能分析
echo "xdebug.output_dir=/tmp/xdebug" >> /etc/php.ini # 输出目录
sudo systemctl restart php-fpm
Webgrind(Web界面)或KCacheGrind(桌面工具)可视化分析cachegrind.out文件,查看函数调用耗时占比。以上方法覆盖了从实时监控到深度分析的全流程,可根据实际需求选择组合使用(如用systemctl快速检查状态,用Prometheus+Grafana长期监控,用Xdebug优化代码)。