温馨提示×

PHP-FPM在Ubuntu上的性能监控方法

小樊
40
2025-12-12 13:51:03
栏目: 编程语言

PHP-FPM在Ubuntu上的性能监控方法

一 快速方法与内置状态页

  • 使用 systemd 查看服务状态与日志:执行sudo systemctl status php{version}-fpm查看运行状态,使用sudo journalctl -u php{version}-fpm -f实时跟踪错误与重启事件。
  • 实时查看进程资源:用top/htop观察 php-fpm 进程的CPU、内存占用;用ps aux | grep php-fpm列出进程细节;用ss -tulpen | grep phpnetstat -tulpen | grep php确认监听的socket/端口与连接状态。
  • 启用并访问 PHP-FPM 状态页:在 pool 配置(如**/etc/php/{version}/fpm/pool.d/www.conf**)中开启pm.status_path = /status,并配置 Web 服务器(Nginx/Apache)对该路径的访问限制与代理;随后通过http://your-domain/status?json获取JSON格式的指标(如active processes、idle processes、accepted conn、slow requests等)。
  • 日志定位问题:检查**/var/log/php-fpm.log或按实际配置定位的日志文件,关注WARNING/ERROR**与慢请求记录。

二 系统与应用层监控工具

  • 系统资源:使用nmonvmstatiostat(需安装sysstat)观察CPU、内存、I/O瓶颈,判断是否为系统层限制导致 PHP-FPM 性能下降。
  • Web 层与日志分析:用goaccess分析 Nginx/Apache 访问日志,洞察吞吐、响应时间分布、Top URL/UA等,辅助定位慢请求来源。
  • APM 与托管监控:接入DatadogNew Relic等 APM,获取请求耗时、数据库/外部调用、错误率等应用层可观测性。
  • 开源监控平台:使用Zabbix进程存活、端口连通、响应指标进行采集与告警。

三 Prometheus与Grafana的可观测性方案

  • 指标采集:部署php-fpm-exporter,让其通过FastCGI/HTTP访问 PHP-FPM 的**/status端点,暴露Prometheus**指标。
  • 配置抓取:在 Prometheus 中添加job,指向 exporter 的**/metrics端点,设置scrape_interval**(如15s)。
  • 可视化与告警:在Grafana导入 PHP-FPM 仪表盘(社区有现成模板),并基于关键指标(如active processes、queue、slow requests、accepted conn)配置阈值告警

四 关键指标与告警阈值示例

指标 含义 建议关注 简单告警思路
active processes 当前处理中的进程数 接近或超过pm.max_children 进程耗尽风险,需扩容或优化
idle processes 空闲进程数 长期偏低 处理能力紧张,考虑提高pm.min_spare_servers
accepted conn 累计接受连接数 增长异常 结合queue判断是否过载
queue 排队请求数 持续大于0 存在瓶颈,检查pm.max_children/慢请求
slow requests 慢请求计数 持续增长 定位慢接口/SQL,优化代码与索引
listen queue 监听队列长度 大于0 进程不足或后端阻塞,需扩容或调优

五 排障与优化要点

  • 连接与端口:用ss -lntp | grep php确认socket/端口与权限;确保 Web 服务器与 PHP-FPM 的listenfastcgi_pass一致。
  • 日志与慢请求:打开slowlog = /var/log/php-fpm/slow.log并设置request_slowlog_timeout,捕获长耗时调用栈。
  • 进程管理参数:结合内存与负载调优pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers、pm.max_requests,避免进程饥饿/频繁重启
  • 性能加速:启用OPcache(如opcache.enable=1),减少脚本编译开销。
  • 变更验证:每次调整配置后执行sudo systemctl reload php{version}-fpm,并通过**/status?json日志**验证生效与稳定性。

0