php-fpm 善用 slow log 找到效能瓶頸

2016-04-25 php

前幾天在替一個客戶進行系統分析,剛好想到之前常使用的 slow log,slow log 可以幫你記錄執行超過時間的工作,這對於檢視效能記錄有非常大的幫助

 

在 php-fpm 的設定有一項 request_slowlog_timeout 是用來記錄 php 執行後成功 request 的 timeout 時間,只要超過設定值就會記錄在 slow log 上

 

設定 php-fpm slow log

  • PHP 5.3.3 before

 

  • PHP 5.3.3 later

 

  • request_terminate_timeout 是指可以執行 php-fpm 的有效時間,如果超過就會自動放棄,但如果是需要長時間執行的就可以適情況調大,如遊戲
  • request_slowlog_timeout 只要執行超過這個設定值的秒數就記錄在 slowlog
  • slowlog 記錄 log 的位置

 

設定完畢記得 reload php-fpm !!

 

slow log 分析

在上面這個範例中執行了 index.php,並且觸發 query 的是 MySQLi.php 進行連接,最後 dump failed 所以記錄在 slow

 

在實際使用中會詳細記錄 timeout 所執行的資訊,對於效能的 debug 非常有效,實際你看到的可能和本篇的範例不盡相同,因為 slow log 會針對不同的動作進行記錄。

 

[custom-facebook-feed]

4 comments

  1. Jerry Chen 說:

    我一直遇到 FastCGI idle time to 30s 的錯誤,有時會當掉, 您有建議可以給我嗎? 我想應該是設定這個檔案的問題

    • shazi7804 說:

      Hi Jerry Chen

      請問你是怎麼搭配使用 php-fpm 的 ?

      我未想先猜測您是使用 Apache + php-fpm, 這是由於 Apache 使用 mod_fastcgi 去連接 php-fpm 的時候,如果 php-fpm 執行超過 30 秒沒有任何 response 的話 fastcgi 就會 kill php-fpm 的連接。

      你可以透過設定 fastcgi 的 FastCgiExternalServer 將 -idle-timeout 條大

      Note: 如果你嘗試修改 php 的 max_execution_time 和 set_time_limit 是無效的 (因為 mod_fastcgi 直接 kill php-fpm)

      Reference:
      https://docs.oracle.com/cd/B31017_01/web.1013/q20204/mod_fastcgi.html

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱

%d 位部落客按了讚: