PHP慢腳本日志和Mysql的慢查詢日志(轉)


 

 

1、PHP慢腳本日志

  • 間歇性的502,是后端 PHP-FPM 不可用造成的,間歇性的502一般認為是由於 PHP-FPM 進程重啟造成的。
  • 在 PHP-FPM 的子進程數目超過的配置中的數量時候,會出現間歇性的502錯誤,如果在配置中設置了max_requests的話,超過數量也會出現502錯誤,而max_requests的設置,正是為了防止不安全的第三方library腳本的 內存泄露 ,當然你自己編寫的腳本存在 死鎖 的話,也會出現502現象。

  • 如果你發現mysql負載並不高,但是php-fpm的進程數和內存占用過高的話,恭喜你,大多數情況下是因為腳本存在死鎖。

2. 既然找到了是php的問題,如何去定位php腳本呢?

開啟php慢查詢日志:

  1. $ sudo vi /usr/loal/php/etc/php-fpm.conf
  2. ; Default Value: 0
  3. request_slowlog_timeout = 1s
  4. ; The log file for slow requests
  5. ; Default Value: /usr/local/php/log/php-fpm.log.slow
  6. slowlog = /usr/local/php/log/php-fpm.log.slow

默認的 request_slowlog_timeout 是0,php的慢腳本日志是關閉的,因此設置為大於0的n,表示執行時間超過n的腳本將記錄進入slowlog里。
然后監測到網站存在問題的時候查看下slowlog即可發現慢腳本,對腳本進行檢查處理即可。

3. 2、Mysql的慢查詢日志

mysql慢查詢日志對於跟蹤有問題的查詢非常有用,可以分析出當前程序里有很耗費資源的sql語句,那如何打開mysql的慢查詢日志記錄呢?

其實打開mysql的慢查詢日志很簡單,只需要在mysql的配置文件里(windows系統是my.ini,linux系統是my.cnf)的[mysqld]下面加上如下代碼:

  1. log-slow-queries=/var/lib/mysql/slowquery.log
  2. long_query_time=2

long_query_time=2中的2表示查詢超過兩秒才記錄.
如果日志內容很多,用眼睛一條一條去看會累死,mysql自帶了分析的工具,使用方法如下:

  1. $ cd /usr/local/mysql/bin
  2. $ mysqldumpslow help
  3. -s,是order的順序,主要有c,t,l,rac,at,al,ar,分別是按照query次數,時間,lock的時間和返回的記錄數來排序,前面加了a的時倒敘
  4. -t,是top n的意思,即為返回前面多少條的數據
  5. -g,后邊可以寫一個正則匹配模式,大小寫不敏感的
  6. $ mysqldumpslow -s c -t 20 host-slow.log #訪問次數最多的20個sql語句
  7. $ mysqldumpslow -s r -t 20 host-slow.log #返回記錄集最多的20個sql
  8. $ mysqldumpslow -t 10 -s t -g left join host-slow.log #按照時間返回前10條里面含有左連接的sql語句

mysql慢查詢日志查詢手冊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM