2013-04-15 34 views
3

如何計算我的php腳本實際使用的CPU時間?如何獲得PHP中使用的真實CPU時間?

注意這不是我在尋找:

<?php 
$begin_time=microtime(true); 
//.. 
//end of the script: 
$total_time=microtime(true)-$begin_time; 

,因爲這會給我經過的時間。這可能包括同時運行的不相關進程使用大量時間以及等待I/O所花費的時間。

我見過有使用getrusage(),但在文檔頁面的用戶評論說:

的getrusage()僅上報一次應用程序失去背景下,正在更新的內核計數器和切換到內核空間發生。例如,在現代Linux服務器內核上,這意味着getrusage()調用會返回以10毫秒舍入的信息,桌面內核 - 在1ms。

的getrusage()不是微測量可用在所有 - 和getmicrotime(真)可能是更有價值的資源。

,這樣似乎不是一種選擇,是嗎?

我還有什麼替代方案?

+0

它說getmicrotime(真)可能是一個更有價值的資源,這不是說你被鼓勵使用它嗎? – Jonast92

+2

哦,順便說一句,這可不能幫助你嗎? http://stackoverflow.com/questions/8413323/cpu-get-usage-in-php關於你的第一個評論,看看接受的答案 – Jonast92

+0

@ Jonast92,它說microtime(true)比getrusage *更有價值*,它也說getr​​usage是完全沒用的。 microtime只是不衡量我需要衡量的東西。 – matteo

回答

1

定義「你的」I/O。從技術上講,內存移動到CPU寄存器是I/O。你是否說你想從計算中刪除那段時間? (我猜沒有)

什麼我得到的是你正在尋找最有可能的輪廓某種方式對你的代碼。如果你想測量沒有花費時間讀取/寫入文件或網絡套接字的時間,只需使用microtime並在執行I/O的部分周圍撥打額外的電話。然後,您還會了解您的I/O所花費的時間。更有可能的是,你會發現你有一些循環會花費比預期更多的時間。

當我簡介是這樣我既可以使用分析工具在Eclipse中,或者我用時間記錄器和做一些的時間登錄到代碼的二進制搜索十歲上下的插入。通常我會發現一小部分代碼佔用了測量時間的85%並在那裏進行優化。

另外,作爲一個側面說明,不要讓完美成爲現實的敵人。在您的流程中,有90%的時間您的電話將不會被其他流程中斷,您的微電話記錄數量將足夠接近。

+0

我已經定義了我的意思通過I/O時,我說:「等待對於I/O「,所以我正在談論進程等待的那些I/O形式。你提出的使用microtime和在I/O和網絡操作中增加額外調用的技巧不能解決另一個問題:避免計算進程完全沒有花費的時間,而是通過其他進程來計算。 – matteo

+0

已經剖析了數十萬行PHP代碼我從來沒有遇到過一個案例,我無法簡單地使用microtime來分析長時間運行的部分。我只是說...你可能有一個。00001%的情況,但我懷疑它。 – Zak

+0

關於此問題:「在您的流程中,90%的時間您的電話將不會被其他流程中斷,並且您的微秒計數將足夠接近。」 - 沒門。同時向Web服務器發出幾十個請求,並觀察幾十個同時耗用1%cpu的httpd進程。哦,好的,他們可能不會在非Io代碼中間隨機中斷,而只是在等待I/O時才中斷?那麼好吧,你的竅門可能90% - 工作,但嘿,圍繞每個查詢和文件讀取與分析調用是不完全「實際」。 – matteo

相關問題