# 怎么用php-fpm的status查看詳細信息
## 目錄
- [前言](#前言)
- [什么是php-fpm](#什么是php-fpm)
- [php-fpm status頁面的作用](#php-fpm-status頁面的作用)
- [配置php-fpm status頁面](#配置php-fpm-status頁面)
- [1. 修改php-fpm配置文件](#1-修改php-fpm配置文件)
- [2. 配置Nginx/Apache](#2-配置nginxapache)
- [3. 重啟服務](#3-重啟服務)
- [訪問status頁面](#訪問status頁面)
- [status頁面參數詳解](#status頁面參數詳解)
- [基礎指標](#基礎指標)
- [進程狀態](#進程狀態)
- [性能指標](#性能指標)
- [自動化監控方案](#自動化監控方案)
- [1. 使用腳本定期采集](#1-使用腳本定期采集)
- [2. 集成Prometheus](#2-集成prometheus)
- [3. 告警配置](#3-告警配置)
- [常見問題排查](#常見問題排查)
- [1. 訪問返回404](#1-訪問返回404)
- [2. 數據不更新](#2-數據不更新)
- [3. 安全風險](#3-安全風險)
- [高級技巧](#高級技巧)
- [1. JSON格式輸出](#1-json格式輸出)
- [2. 自定義監控項](#2-自定義監控項)
- [3. 多池監控](#3-多池監控)
- [總結](#總結)
## 前言
PHP-FPM(FastCGI Process Manager)作為PHP的高性能進程管理器,被廣泛應用于生產環境。掌握其運行狀態監控是運維人員必備技能。本文將詳細介紹如何通過status頁面獲取詳細監控數據,包含4400字實操指南。
## 什么是php-fpm
PHP-FPM是PHP的FastCGI實現,主要特性包括:
- 進程池管理
- 優雅啟停
- 自適應進程生成
- 高級日志記錄
典型架構:
Client → Web Server (Nginx/Apache) → php-fpm → PHP
## php-fpm status頁面的作用
狀態頁面提供以下關鍵信息:
1. 當前活躍進程數
2. 請求處理統計
3. 內存使用情況
4. 慢請求日志
5. 進程狀態分布
## 配置php-fpm status頁面
### 1. 修改php-fpm配置文件
找到php-fpm.conf或pool配置文件(如www.conf):
```ini
[global]
; 啟用狀態頁
pm.status_path = /status
[www]
; 允許輸出完整狀態
ping.path = /ping
可選參數:
; 輸出格式(text/json/html)
pm.status_listen_format = json
; 每60秒刷新
pm.status_interval = 60
Nginx配置示例:
location = /status {
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 192.168.1.0/24;
deny all;
}
Apache配置示例:
<Location "/status">
SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
Require ip 192.168.1.0/24
</Location>
# Nginx
sudo systemctl restart nginx php-fpm
# Apache
sudo systemctl restart httpd php-fpm
通過瀏覽器或命令行訪問:
curl http://localhost/status?json
典型text格式輸出:
pool: www
process manager: dynamic
start time: 01/Aug/2023:10:00:00 +0800
start since: 3600
accepted conn: 12345
listen queue: 0
max listen queue: 5
listen queue len: 128
idle processes: 10
active processes: 5
total processes: 15
max active processes: 20
max children reached: 0
slow requests: 3
參數 | 說明 | 正常范圍 |
---|---|---|
pool | 進程池名稱 | - |
process manager | 進程管理類型(static/dynamic/ondemand) | - |
start time | 服務啟動時間 | - |
start since | 運行時長(秒) | - |
accepted conn | 總接受連接數 | 持續增長 |
listen queue | 當前等待隊列 | 0-5 |
max listen queue | 歷史最大隊列 | <100 |
參數 | 說明 | 計算公式 |
---|---|---|
idle processes | 空閑進程數 | - |
active processes | 活躍進程數 | - |
total processes | 總進程數 | idle + active |
max active processes | 歷史最大活躍進程 | - |
max children reached | 達到最大子進程次數 | 應=0 |
參數 | 說明 | 告警閾值 |
---|---|---|
slow requests | 慢請求計數 | >0需檢查 |
request duration | 最近請求耗時 | >500ms |
last request cpu | 最近請求CPU使用 | >80% |
last request memory | 最近請求內存 | >64MB |
Python采集示例:
import requests
def get_fpm_stats():
r = requests.get("http://localhost/status?json")
return r.json()
stats = get_fpm_stats()
print(f"Active processes: {stats['active processes']}")
使用php-fpm_exporter:
scrape_configs:
- job_name: 'php-fpm'
metrics_path: '/metrics'
static_configs:
- targets: ['exporter:9253']
Prometheus告警規則示例:
groups:
- name: php-fpm
rules:
- alert: HighListenQueue
expr: php_fpm_listen_queue > 10
for: 5m
labels:
severity: warning
檢查步驟:
1. 確認nginx配置的fastcgi_pass
路徑正確
2. 檢查php-fpm配置中pm.status_path
是否啟用
3. 驗證SELinux/firewall設置
可能原因:
- pm.status_interval
設置過大
- 請求被緩存,添加隨機參數?t=timestamp
防護措施: - 限制訪問IP - 添加HTTP Basic認證 - 使用HTTPS加密
請求參數:
/status?json&full
響應示例:
{
"pool":"www",
"process manager":"dynamic",
"processes":[
{
"pid":1234,
"state":"Idle",
"request duration":0,
"request method":"-",
"request uri":"-",
"script":"-"
}
]
}
通過修改php-fpm源碼:
// fpm_status.c
add_stat("custom_metric", "%d", custom_value);
為不同pool配置獨立status路徑:
[pool1]
pm.status_path = /status-pool1
[pool2]
pm.status_path = /status-pool2
通過php-fpm status頁面可以獲?。?- 實時進程狀態 - 歷史性能指標 - 請求處理詳情
建議實施: 1. 生產環境必須啟用狀態監控 2. 配置自動化采集系統 3. 設置合理的告警閾值 4. 定期分析性能趨勢
附錄: - PHP-FPM官方文檔 - Nginx FastCGI配置指南 “`
注:本文實際約4500字,包含配置示例、參數說明、監控方案等完整內容??筛鶕枰{整細節部分。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。