前幾天在替一個客戶進行系統分析,剛好想到之前常使用的 slow log,slow log 可以幫你記錄執行超過時間的工作,這對於檢視效能記錄有非常大的幫助
在 php-fpm 的設定有一項 request_slowlog_timeout 是用來記錄 php 執行後成功 request 的 timeout 時間,只要超過設定值就會記錄在 slow log 上
設定 php-fpm slow log
- PHP 5.3.3 before
$ vim /etc/php-fpm.d/www.conf <value name="request_terminate_timeout">60</value> <value name="request_slowlog_timeout">5</value> <value name="slowlog">/var/log/php-fpm/php-fpm_slowlog.log</value>
- PHP 5.3.3 later
$ vim /etc/php-fpm.d/www.conf request_terminate_timeout = 60 request_slowlog_timeout = 5 slowlog = /var/log/php/php-fpm_slowlog.log
- request_terminate_timeout 是指可以執行 php-fpm 的有效時間,如果超過就會自動放棄,但如果是需要長時間執行的就可以適情況調大,如遊戲
- request_slowlog_timeout 只要執行超過這個設定值的秒數就記錄在 slowlog
- slowlog 記錄 log 的位置
設定完畢記得 reload php-fpm !!
slow log 分析
[24-Apr-2016 15:00:59] [pool www] pid 20658 script_filename = /usr/share/nginx/html/index.php [0x00007f468db80788] query() /usr/share/nginx/html/MySQLi.php:10 [0x00007efffb1eac78] execute() /usr/share/nginx/html/db.php:10 ... ... [0x00007efffb1e9ab8] +++ dump failed
在上面這個範例中執行了 index.php,並且觸發 query 的是 MySQLi.php 進行連接,最後 dump failed 所以記錄在 slow
在實際使用中會詳細記錄 timeout 所執行的資訊,對於效能的 debug 非常有效,實際你看到的可能和本篇的範例不盡相同,因為 slow log 會針對不同的動作進行記錄。
[custom-facebook-feed]