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 會針對不同的動作進行記錄。

 

Unable to display Facebook posts.
Show error

Error: Server configuration issue
Please refer to our Error Message Reference.

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 用於訂閱