PHP在Debian中如何监控
小樊
31
2025-12-30 16:27:11
在 Debian 上监控 PHP 的实用方案
一 快速排障与系统层面监控
- 进程与服务状态
- 查看与重启服务:systemctl status/restart php-fpm(以及 nginx/mysql)。
- 实时资源与进程:top/htop(定位高 CPU/内存的 PHP-FPM 工作进程)、ps aux | grep php(列出所有 PHP 进程)、systemd-cgtop(按 cgroup 查看资源,适合 PHP-FPM 进程池)。
- 资源与 I/O
- 综合资源:vmstat 1、iostat -x 1、netstat/ss -s、free -m、df -h、uptime(负载)。
- 日志
- Web 服务器:/var/log/nginx/access.log、/var/log/nginx/error.log。
- PHP-FPM:常见路径 /var/log/php-fpm.log 或 /var/log/php-fpm/error.log;也可在 php.ini 的 error_log 指令查看配置。
- 实时查看:tail -f /var/log/nginx/error.log /var/log/php-fpm.log*。
二 PHP-FPM 专项监控
- 启用状态页
- 编辑 PHP-FPM 池配置(常见路径:/etc/php/8.0/fpm/pool.d/www.conf 或 /etc/php-fpm.d/www.conf),开启:
- pm.status_path = /php_status
- 访问控制(示例):allow 127.0.0.1; deny all;(Nginx 侧配置)
- 重载:systemctl reload php-fpm
- 访问示例:curl http://127.0.0.1/php_status(可配合 ?json 获取结构化数据)
- 关键指标
- 进程管理:pool、process manager、start time、start since
- 运行时:accepted conn、listen queue、max listen queue、listen queue len
- 性能:slow requests、total processes、idle processes、active processes
- 可视化与告警
- 将 /php_status 接入 Prometheus(文本采集器或 nginx_exporter),在 Grafana 展示队列、进程占用、慢请求趋势并设置阈值告警。
三 代码级与应用性能监控
- 性能分析
- Xdebug:生成函数级调用图与耗时,配合 Webgrind/KCacheGrind 分析。
- Blackfire:面向生产的低开销性能剖析与瓶颈定位。
- XHprof:轻量级采样分析,适合在 Debian 上快速接入与对比优化前后差异。
- APM 与观测
- New Relic、Datadog APM:请求链路、数据库/外部调用、错误与吞吐,支持 PHP-FPM 与主流框架。
- 压力与容量
- ApacheBench(ab):基础吞吐与并发测试;JMeter:多协议、场景化压测。
四 日志聚合与可视化平台
- 实时与轻量
- Netdata:开箱即用的实时仪表盘,访问 http://服务器IP:19999。
- Glances:跨平台监控,支持 Web/终端。
- 进程保活与自愈
- Supervisor:将 php-fpm 等纳入管理,异常自动重启;示例配置可将 php-fpm 前台运行并受控于 Supervisor(注意与系统服务管理的取舍)。
- 企业级与可观测性
- Nagios/Zabbix:主机/服务/进程监控与阈值告警。
- Prometheus + Grafana:时序指标采集与可视化,适合 PHP-FPM 状态页、Nginx 指标与系统资源的统一观测。
五 落地检查清单与告警阈值建议
- 日常巡检
- 服务健康:systemctl is-active php-fpm && systemctl is-active nginx
- 资源异常:top/htop 观察是否有 PHP-FPM 进程长期占用过高 CPU/内存
- 队列与慢请求:状态页 listen queue > 0 或 slow requests 持续增长需优先排查
- 错误日志:tail -f /var/log/php-fpm.log /var/log/nginx/error.log* 关注 Fatal/Parse/Timeout
- 建议阈值(按业务调整)
- listen queue > 10(或接近 listen queue len)触发扩容或优化
- slow requests 持续增长或突增
- active processes ≈ pm.max_children 且 idle processes 接近 0
- 平均响应时间 明显上升或 吞吐(RPS) 下降
- 内存使用率 > 80% 或 磁盘剩余 < 20%
- 优化方向
- 启用并调优 OPcache,减少文件重复编译开销
- 合理使用 Redis/Memcached 降低数据库压力
- 数据库索引与查询优化,减少 N+1 与慢查询
- 结合 Xdebug/Blackfire/XHprof 定位热点函数与 I/O 瓶颈