天天看點

PHP慢腳本日志和Mysql的慢查詢日志

1、PHP慢腳本日志

間歇性的502,是後端 PHP-FPM 不可用造成的,間歇性的502一般認為是由于 PHP-FPM 程序重新開機造成的。

在 PHP-FPM 的子程序數目超過的配置中的數量時候,會出現間歇性的502錯誤,如果在配置中設定了max_requests的話,超過數量也會出現502錯誤,而max_requests的設定,正是為了防止不安全的第三方library腳本的 記憶體洩露 ,當然你自己編寫的腳本存在 死鎖 的話,也會出現502現象。

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

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

開啟php慢查詢日志:

$ sudo vi /usr/loal/php/etc/php-fpm.conf

; Default Value: 0

request_slowlog_timeout = 1s

; The log file for slow requests

; Default Value: /usr/local/php/log/php-fpm.log.slow

slowlog = /usr/local/php/log/php-fpm.log.slow

預設的 request_slowlog_timeout 是0,php的慢腳本日志是關閉的,是以設定為大于0的n,表示執行時間超過n的腳本将記錄進入slowlog裡。

然後監測到網站存在問題的時候檢視下slowlog即可發現慢腳本,對腳本進行檢查處理即可。

2、Mysql的慢查詢日志

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

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

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

long_query_time=2

long_query_time=2中的2表示查詢超過兩秒才記錄.

如果日志内容很多,用眼睛一條一條去看會累死,mysql自帶了分析的工具,使用方法如下:

$ cd /usr/local/mysql/bin

$ mysqldumpslow –help

-s,是order的順序,主要有c,t,l,r和ac,at,al,ar,分别是按照query次數,時間,lock的時間和傳回的記錄數來排序,前面加了a的時倒叙 

-t,是top n的意思,即為傳回前面多少條的資料 

-g,後邊可以寫一個正則比對模式,大小寫不敏感的 

$ mysqldumpslow -s c -t 20 host-slow.log   #通路次數最多的20個sql語句

$ mysqldumpslow -s r -t 20 host-slow.log  #傳回記錄集最多的20個sql

$ mysqldumpslow -t 10 -s t -g “left join” host-slow.log  #按照時間傳回前10條裡面含有左連接配接的sql語句

mysql慢查詢日志查詢手冊:

http://outofmemory.cn/wr/?u=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fmysqldumpslow.html

本文轉自 boy461205160 51CTO部落格,原文連結:http://blog.51cto.com/461205160/1735654