2012-07-20 23 views
2

這是我的頂部輸出:PHP和MySQL:找出哪個文件或查詢導致重CPU負荷

6747 example.com 15 0241米19米8188ř29.9 [CPU]0.2 [RAM ] 3:24.89 PHP

31798的MySQL 15 01952米422米5384小號12.0 [CPU]5.3 [RAM] 9:00.27 的mysqld

看看PHP的CPU使用情況。我不知道哪個文件導致此負載。是否有任何模塊顯示哪個文件在樹下使用CPU?我的意思是這樣的:

6747 example.com 15 0241米19米8188ř29.9 [CPU] 0.2 [RAM] 3:24.89 PHP

     5.49%       index.php 
        15.39%       videos.php 
         x%        y.php 

31798的MySQL 15 01952米422米5384小號12.0 [ CPU] 5.3 [RAM] 9:00.27 mysqld

我也想爲mysql做同樣的事情。我想現在正在執行哪個查詢,需要多長時間。

回答

3

最簡單的選項(不是說最準確的,但最簡單的)將是:

  • 對於PHP,如果你想進行比較的另外一個PHP文件,認爲該花的時間最長的過程正在使用大多數CPU。使用網絡分析器(內置於Chrome和IE或Firebug)來確定哪個進程花費的時間最長。如果沒有,用戶提琴手(Windows)或查爾斯(Mac)。刪除數據響應時間並平均剩餘時間=生成響應的時間= CPU使用率。請注意,這將包括外部調用,memcached調用,mySQL調用等。

  • 對於mySQL,慢速查詢日誌是非常寶貴的。 (需要在my.cnf中配置並重新啓動服務器 - 但它應該被認爲是強制性的。)

  • 對於更多診斷,Xdebug(如Xesued所建議的)將幫助您分析腳本的各個部分(以及作爲調試)。不過,不建議用於生產,因爲它會進一步放慢你的速度。

  • 另一種粗糙的方法是「回顯microtime(true);」在腳本的各個位置,或者將該信息輸出到日誌文件。 (在腳本開始時打開日誌文件,並在各個點記錄microtime - 尋找大間隙。)

+0

我使用REQUEST_URI記錄了執行時間。然後我通過文件名找到問題。 – xecute 2012-07-21 12:19:43

1

我不知道如何在運行時確定PHP腳本加載。 (不知道它是否可能)。但是,使用Xdebug的分析器可以幫助您確定腳本的速度緩慢。

Xdebug Profiler

它是一種偉大的工具,將幫助您捕捉90 +%的速度變慢的。

至於MySQL的:這是一個相關的問題:how-to-analyze-query-cpu-time

+0

我會盡量嘗試Xdebug Profiler。謝謝! – xecute 2012-07-21 12:20:15

0

我不覺得有什麼,可直接,但假設每個這些腳本的運行作爲一個單獨的進程(像單獨呼籲CLI ),您可以使用getmypid()然後將其與您的CPU負載日誌相關聯。

相關問題