PHP-FPM性能监控怎么做
导读:PHP-FPM性能监控实操指南 一 监控目标与关键指标 进程与连接 pm.status_path 暴露的 pool、process manager、start time、start since 等基础信息 listen queue、ma...
PHP-FPM性能监控实操指南
一 监控目标与关键指标
- 进程与连接
- pm.status_path 暴露的 pool、process manager、start time、start since 等基础信息
- listen queue、max listen queue、listen queue len 观察排队情况
- idle processes、active processes、total processes 判断进程是否充足
- 吞吐与延迟
- accepted conn、requests 计算吞吐(req/s)
- slow requests 定位慢请求
- 通过 request duration(需启用 request_slowlog_timeout)衡量 P95/P99 延迟
- 资源与稳定性
- 系统层面:CPU、内存、文件描述符、连接数(netstat/ss)
- 进程内存:单个 php-fpm 进程的 RSS 与聚合值,防止 OOM
- 日志:FPM 错误日志、慢日志、Nginx 访问/错误日志
二 快速可用的监控手段
- 启用并访问 PHP-FPM 状态页
- 在 pool 配置(如 /etc/php/8.0/fpm/pool.d/www.conf)中开启:
- pm.status_path = /status
- 建议同时设置:access.log = /var/log/php-fpm/status.log、access.format = “%R - %u %t "%m %r" %s”
- Web 端访问:http://your-domain/status?json(或 ?html/?xml),Nginx 侧需对该路径做访问控制(如 allow 127.0.0.1; deny all; )
- 在 pool 配置(如 /etc/php/8.0/fpm/pool.d/www.conf)中开启:
- 命令行与系统工具
- 服务状态:systemctl status php8.0-fpm
- 资源占用:top/htop、ps -eo pid,rss,command | grep php-fpm(RSS 单位为 KB)
- 连接与端口:ss -lntp | grep php-fpm 或 netstat -tulpen | grep php-fpm
- Web 服务器与日志
- Nginx 状态:/nginx_status(需 ngx_http_stub_status_module)
- 访问分析:goaccess /var/log/nginx/access.log -a
- 第三方与 APM
- 平台监控:Prometheus + Grafana(FPM Exporter)、Zabbix、Datadog、New Relic
- 深度分析:Xdebug + Webgrind/KCacheGrind(定位函数级瓶颈,注意性能开销)
- 进程守护与告警
- Monit/Supervisor 监控进程存活并自动重启,结合日志告警规则实现 7×24 看护
三 可观测性落地方案 Prometheus Grafana
- 暴露指标
- 启用 pm.status_path,使用 prometheus-php-fpm-exporter 或 nginx-php-fpm-exporter 拉取状态页(JSON)并转换为 /metrics
- 采集与存储
- Prometheus 抓取间隔建议 15s;Grafana 使用 5–15s 刷新
- 关键面板与 PromQL 示例
- 吞吐:rate(php_fpm_accepted_conn_total[1m])
- 排队:php_fpm_listen_queue or (php_fpm_max_children - php_fpm_active_processes)
- 进程健康:php_fpm_active_processes / php_fpm_max_children
- 慢请求:rate(php_fpm_slow_requests_total[5m])
- P95 延迟(若 exporter 提供直方图或经日志计算):histogram_quantile(0.95, sum(rate(php_fpm_request_duration_seconds_bucket[1m])) by (le))
- 告警规则示例
- 队列堆积:php_fpm_listen_queue > 10 持续 2 分钟
- 进程打满:php_fpm_active_processes / php_fpm_max_children > 0.9 持续 3 分钟
- 慢请求激增:rate(php_fpm_slow_requests_total[5m]) > 0.1
- 进程异常退出:up{ job=“php-fpm”} == 0
四 日志与 APM 的协同
- 日志体系
- FPM 错误日志与慢日志:记录 Fatal/Parse/Recoverable 错误与超过阈值的慢请求堆栈
- Nginx 访问/错误日志:配合 goaccess 做流量、错误码、UA、地理分布分析
- 集中化:使用 ELK/Graylog 收集、检索与可视化,设置关键字与阈值告警(如 5xx 比例、慢请求突增)
- APM 深入
- New Relic/Datadog APM:无侵入采集 事务、数据库/外部调用、错误、调用栈,与 FPM 指标/日志联动定位根因
五 告警阈值与优化动作
- 阈值建议(需结合实际容量与 SLO 调整)
- listen queue > 10 或接近 listen queue len
- active processes / max_children > 0.8
- slow requests 持续增长
- 单进程 RSS 接近或突破 php_admin_value[memory_limit] 的风险阈值
- 快速处置
- 平滑重启释放内存:kill -USR2 $(cat /var/run/php-fpm.pid)(不中断现有请求)
- 扩容进程池:适度提高 pm.max_children(需确保 内存与 CPU 充足)
- 打开/调优慢日志:request_slowlog_timeout = 1s,定位长 SQL、外部 API、循环等
- 资源与连接:检查 文件描述符限制(ulimit -n)、数据库/缓存连接池与超时
- 容量规划
- 估算峰值并发:并发 ≈ RPS × 平均响应时间(秒)
- 预留 20–30% 余量,结合 P95/P99 与队列指标做弹性扩缩容
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: PHP-FPM性能监控怎么做
本文地址: https://pptw.com/jishu/768533.html
