温馨提示×

如何监控Linux上php-fpm的性能

小樊
41
2026-01-04 20:17:37
栏目: 编程语言

监控目标与总体思路

  • 覆盖四个维度:服务可用性、进程与连接、请求性能、资源与日志。
  • php-fpm 内置状态页 为核心,配合 Nginx/访问控制系统工具时序/告警平台 实现持续观测与告警。

启用并安全地暴露 php-fpm 状态页

  • 在 FPM 配置中启用状态页(示例为 /php_status),并限制访问来源;通过 Nginx FastCGI 暴露该路径,便于采集与隔离。
  • 示例配置
    • FPM(/etc/php-fpm.d/www.conf)
      pm.status_path = /php_status
      
    • Nginx(/etc/nginx/conf.d/status.conf)
      server {
        listen 80;
        server_name localhost;
      
        location = /php_status {
          include fastcgi_params;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_pass 127.0.0.1:9000;   # 与 FPM 监听一致
          allow 127.0.0.1;                # 仅本机采集
          deny all;
        }
      }
      
    • 重启服务
      systemctl restart php-fpm nginx
      
    • 验证
      curl -s http://127.0.0.1/php_status
      
  • 安全建议:仅在内网或采集专用域名开放;启用 Basic AuthIP 白名单;避免对外暴露。

关键指标与采集方式

  • 状态页字段与含义(常用)
    • pool:进程池名称(如 www
    • process manager:进程管理方式(static/dynamic/ondemand
    • start time / start since:启动时间 / 运行时长(秒)
    • accepted conn:累计接受请求数
    • listen queue / max listen queue / listen queue len:当前/最大等待队列与队列长度
    • idle / active / total processes:空闲/活跃/总进程数
    • max active processes:自启动以来最大活跃进程数
    • max children reached:达到 pm.max_children 的次数
    • slow requests:慢请求计数(需开启慢日志)
  • 采集方式
    • 直接 HTTP GET 状态页,配合 awk/sed 或脚本解析关键字段,供 Zabbix/SNMP/自研采集器 使用。
    • 系统层面配合 top/htop/ps 观察 CPU/内存;用 ss/netstat 查看 监听与连接;用 journalctl 查看 FPM 日志

告警阈值与优化方向

  • 建议阈值与动作
    • listen queue > 0:说明请求排队,短期可扩容进程;持续存在需评估 pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers
    • max children reached > 0:达到进程上限,优先提高 pm.max_children 或优化慢请求/阻塞。
    • active processes 长期接近 pm.max_children:处理能力不足,需扩容或优化应用与数据库。
    • slow requests 增长:开启并分析 slowlog,定位慢脚本/慢 SQL/外部依赖瓶颈。
    • 单进程 RSS 持续升高:可能存在内存泄漏,结合 memory_limit 与代码排查,必要时重启 FPM 平滑恢复。
  • 配置与优化要点
    • 进程模型与数量:结合 pm.max_children / pm.start_servers / pm.min_spare_servers / pm.max_spare_servers 与内存预算调优;动态/按需模式注意队列与峰值。
    • 请求治理:合理设置 request_terminate_timeout、超时与重试策略,避免雪崩。
    • 代码与缓存:启用 OPcache,减少编译开销;优化慢查询与热点逻辑;必要时引入 页面/数据缓存

可视化与长期观测

  • Prometheus + Grafana
    • 使用 php-fpm-exporter 采集状态页指标,在 Grafana 构建看板,监控 队列、进程数、请求速率、慢请求 等,并设置阈值告警。
  • Zabbix
    • 通过 UserParameter 调用脚本解析状态页字段,建立 Item/Trigger,对 队列、进程、慢请求 等关键指标告警。
  • APM 与系统监控
    • 结合 New Relic/DatadogAPM 观察应用层性能;用 systemd/journalctltop/htop/psss/netstat 做主机与服务层补充。

0