1. 程式人生 > >LNMP架構二十五(php-fpm慢執行日誌)

LNMP架構二十五(php-fpm慢執行日誌)

php-fpm慢執行日誌

提到慢日誌,很多人會想到mysql中的慢查詢日誌,其實php-fpm的慢執行日誌原理類似,這裡就對比的寫。

1、MySQL慢查詢

  在web開發中,我們經常會寫出一些SQL語句,一條糟糕的SQL語句可能讓你的整個程式都非常慢,超過10秒一般使用者就會選擇關閉網頁,如何優化SQL語句將那些執行時間 比較長的SQL語句找出呢?MySQL給我們提供了一個很好的功能,那就是慢查詢!所謂的慢查詢就是通過設定來記錄超過一定時間的SQL語句

2、PHP-FPM慢日誌

    php-fpm慢日誌slowlog設定可以讓開發者很好的查詢哪些php程序速度過慢而導致的網站問題,讓開發者方便的找到問題的所在。該方法同樣適用於排查nginx的500、502問題根源,當nginx收到如上錯誤碼時,可以確定後端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。

 

MySQL慢查詢的不足

    1.MySQL5.0版本, long_query_time時間粒度不夠細,最小值為1秒。對於高併發效能的網頁尾本而言,1秒出現的意義不大。即出現1秒的查詢比較少。直到mysql5.1.21才提供更細粒度的long_query_time設定.

    2.不能將伺服器執行的所有查詢記錄到慢速日誌中。雖然MySQL普通日誌記錄了所有查詢,但是它們是解析查詢之前就記錄下來了。這意味著普通日誌沒辦法包含諸如執行時間,鎖表時間,檢查行數等資訊。

    3.如果開啟了log_queries_not_using_indexes選項,slow query日誌會充滿過多的垃圾日誌記錄,這些快且高效的全表掃描查詢(表小)會沖掉真正有用的slow queries記錄。比如select * from category這樣的查詢也會被記錄下來。

1、如何開啟慢查詢?  

    首先我們先檢視MYSQL伺服器的慢查詢狀態是否開啟.

      mysql>show variables like '%quer%';

    開啟慢查詢非常簡單, 操作如下:

    方法一

      vi  /etc/my.cnf       注:my.cnf是mysql的配置檔案

      在mysqld下方加入慢查詢的配置語句(一定要在[mysqld]的下方加入

        [mysqld]

            log-slow-queries = /var/lib/mysql/mysql-slow.log

            long_query_time = 1

        儲存退出   重啟mysql

    log-slow-queries : 代表MYSQL慢查詢的日誌儲存目錄, 此目錄檔案一定要有寫許可權。

    long_query_time: sql最長執行時間。

    方法二

      在mysql命令列下執行如下操作:

        set global slow_query_log=ON;

          

        set global long_query_time=1;

          

  測試

    1、檢視生成的慢日誌記錄   此時是空的沒有記錄

      cat mysql-slow.log 

        

    2、執行一條超過設定時間的sql語句 在檢視是否被記錄

      如:select sleep(1);     再去檢視慢日子記錄

         

    到此mysql慢查詢就OK了。

2、 如何開啟php-fpm慢日誌?

    php-fpm.conf的配置檔案中有一個引數request_slowlog_timeout是這樣描述的:

        

  當request_slowlog_timeout 設為一個具體秒時request_slowlog_timeout =5,表示如果哪個指令碼執行時間大於5秒,會記錄這個指令碼到慢日誌檔案中

request_slowlog_timeout =0表示關閉慢日誌輸出。

    慢日誌檔案位置預設在php的安裝目錄下的log資料夾中,可以通過修改slowlog = log/$pool.log.slow引數來指定。

    php-fpm慢日誌的例子,慢日誌會記錄下程序號,指令碼名稱,具體哪個檔案哪行程式碼的哪個函式執行時間過長。

    request_slowlog_timeout 和 slowlog需要同時設定,開啟request_slowlog_timeout的同時需要開啟 slowlog

    慢日誌路徑需要手動建立 (slowlog)

    具體開啟步驟如下:

            cd  /usr/local/php-fpm/etc

           vi php-fpm.conf

          去掉request_slowlog_timeout  、 slowlog的字首分號‘;’,設定request_slowlog_timeout=5;

          重啟程序。