1. 程式人生 > >linux 檢視nginx狀態和php-fpm狀態

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
  • nginx status詳解

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

開啟status頁面

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()方法執行的語句超時了。