linux 檢視nginx狀態和php-fpm狀態
啟用nginx status配置
在預設主機裡面加上location或者你希望能訪問到的主機裡面。
server {
location /nginx-status {
stub_status on;
#access_log /home/www/phpernote/nginx_status.log;//訪問日誌,這裡可以設定為off將其關閉
access_log off;
#allow 127.0.0.1;#允許訪問的IP
#deny all;
}
}
重啟nginx
請依照你的環境重啟你的nginx
service nginx restart
- 開啟status頁面,這裡是通過命令列獲取的,將得到如下結果:
curl http://127.0.0.1/nginx-status
Active connections: 11921
server accepts handled requests
11989 11989 11991
Reading: 56 Writing: 127 Waiting: 242
active connections – 活躍的連線數量
server accepts handled requests — 總共處理了11989個連線 , 成功建立11989次握手, 總共處理了11991個請求
reading — 讀取客戶端的連線數
writing — 響應資料到客戶端的數量
waiting — 開啟 keep-alive 的情況下,這個值等於 active – (reading+writing), 意思就是 Nginx 已經處理完正在等候下一次請求指令的駐留連線。所以,在訪問效率高,請求很快被處理完畢的情況下,Waiting數比較多是正常的.如果reading +writing數較多,則說明併發訪問量非常大,正在處理過程中。
以上是nginx的status資訊
php-fpm和nginx一樣內建了一個狀態頁,對於想了解php-fpm的狀態以及監控php-fpm非常有幫助。
啟用php-fpm狀態功能
編輯php-fpm.conf 配置檔案 找到pm.status_path配置項
pm.status_path = /php-status
nginx配置
在預設主機裡面加上location或者你希望能訪問到的主機裡面。
server {
#nginx的狀態頁面
location /nginx-status {
stub_status on;
access_log off;
#allow 127.0.0.1;#允許訪問的IP
#deny all;
}
#php的狀態頁面
location /php-status {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
#allow x.x.x.x;
access_log off;
#deny all;
}
}
重啟nginx和php-fpm
pool: www
process manager: dynamic
start time: 13/Nov/2018:15:29:58 +0800
start since: 1237
accepted conn: 54
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 14
active processes: 1
total processes: 15
max active processes: 1
max children reached: 0
slow requests: 0
php-fpm status詳解
pool – fpm池子名稱,大多數為www
process manager – 程序管理方式,值:static, dynamic or ondemand. dynamic
start time – 啟動日期,如果reload了php-fpm,時間會更新
start since – 執行時長
accepted conn – 當前池子接受的請求數
listen queue – 請求等待佇列,如果這個值不為0,那麼要增加FPM的程序數量
max listen queue – 請求等待佇列最高的數量
listen queue len – socket等待佇列長度
idle processes – 空閒程序數量
active processes – 活躍程序數量
total processes – 總程序數量
max active processes – 最大的活躍程序數量(FPM啟動開始算)
max children reached - 大道程序最大數量限制的次數,如果這個數量不為0,那說明你的最大程序數量太小了,請改大一點。
6、 php-fpm狀態頁可以通過帶引數實現個性化,可以帶引數json、xml、html並且前面三個引數可以分別和full做一個組合。
json格式:http://127.0.0.1/php-status?json
xml格式: http://127.0.0.1 /php-status?xml
html 格式: http://127.0.0.1 /php-status?html
full格式: http://127.0.0.1 /php-status?full
full詳解
pid – 程序PID,可以單獨kill這個程序. You can use this PID to kill a long running process.
state – 當前程序的狀態 (Idle, Running, …)
start time – 程序啟動的日期
start since – 當前程序執行時長
requests – 當前程序處理了多少個請求
request duration – 請求時長(微妙)
request method – 請求方法 (GET, POST, …)
request URI – 請求URI
content length – 請求內容長度 (僅用於 POST)
user – 使用者 (PHP_AUTH_USER) (or ‘-’ 如果沒設定)
script – PHP指令碼 (or ‘-’ if not set)
last request cpu – 最後一個請求CPU使用率。
last request memorythe - 上一個請求使用的記憶體
檢視php-fpm的slowlog 慢執行
通過slow requests: 52 發現有慢執行
php-fpm.conf 配置檔案
找到request_slowlog_timeout = 0這一行,預設值為0,表示不開啟slowlog,將其值改為3s,表示跟蹤執行時間達到或超過3s的指令碼。
找到slowlog,它的值表示慢執行日誌的路徑。
修改完後需要重啟php,
檢視日誌檔案,slowlog的檔案的內容大概是這樣的:
[31-Dec-2012 09:50:00] [pool www] pid 2874
script_filename = /htdocs/blog/index.php
[0x0000000001cf4ff0] mysql_query() /htdocs/blog/class/mysql.php:9
[0x0000000001cf4ec0] query() /htdocs/blog/class/mysql.php:26
[0x0000000001cf4a70] one() /htdocs/blog/class/ware.php:88
[0x0000000001cf46c8] query() /htdocs/blog/function/common.php:132
[0x0000000001cf3a40] +++ dump failed
這樣就可以很明顯看到什麼mysql.php的mysql_query()方法執行的語句超時了。