2009-07-02 110 views
14

我已經使用valgrinds地塊工具來監視過去的內存使用情況。如何監控linux的內存使用情況?

有誰知道如何捕獲在linux lighttpd服務器上產生的PHP進程的內存使用?

我發現,Valgrind的無法連接到一個prerunning過程(我不知道前手PHP進程的PID反正)

我只看到的lighttpd的內存使用情況,而不是產卵的PHP進程通過lighttpd cgi模塊。

在此先感謝。

回答

13

PHP有它自己的內存測試功能,我不知道這是任何對你有用,但如果你只是想記錄它,你可以使用: http://php.net/manual/en/function.memory-get-peak-usage.php

echo "Using ", memory_get_peak_usage(1), " bytes of ram."; 
+1

獲得/查看這是內存使用情況只是腳本,還是包括php進程內存的使用?另外,如果多個腳本運行,在任何時候都很難獲得高峯使用率。 – DEzra 2009-07-02 08:11:38

+3

將布爾值true作爲memory_get_peak_usage中的第一個參數添加(true)也會返回PHP進程的內存 – scotts 2010-03-02 00:11:36

1

http://php.net/manual/en/function.memory-get-usage.php

應該給你的線程從腳本本身中使用的內存量。我認爲,因爲腳本(和線程)最多隻存在幾毫秒 - 只是生成頁面所需的時間 - 在PHP之外捕獲它可能很困難。

  • B計劃

你也可以調試從服務器,可能是更準確的信息 - 我用Xdebug的個人,當它拋出一個錯誤/發現它給你一個堆棧跟蹤,時間和內存使用情況。您可以在腳本結尾觸發它:

trigger_error ('Finished', E_USER_NOTICE); 

它會給你信息。我不確定如何捕捉數據 - 如果您需要,可能會在文檔中提供關於如何的功能 - 我隱約記得看到一個。

+0

嗨,是的,我嘗試了memory_get_usage和memory_get_peak_usage這個腳本創建了一個字符串,每次循環增加50次字符串。看來memory_get_usage()總是返回2mb(以字節爲單位)。這似乎是錯的(除非php預先分配2mb所有腳本) – DEzra 2009-07-02 08:10:16

+1

我已經更新了我的答案 - xdebug可以從http://www.xdebug.org/ – Meep3D 2009-07-02 08:48:42

6

不能使用'ps'工具?

$ ps -F -C php-cgi 

UID  PID PPID C SZ RSS PSR STIME TTY   TIME CMD 
http  10794 10786 0 4073 228 0 Jun09 ?  00:00:00 /usr/bin/php-cgi 
http  10795 10794 0 4073 28 0 Jun09 ?  00:00:00 /usr/bin/php-cgi 
http  10796 10786 0 4073 228 0 Jun09 ?  00:00:00 /usr/bin/php-cgi 
http  10797 10796 0 4613 3544 0 Jun09 ?  00:00:00 /usr/bin/php-cgi 
... 

RSS是實數內存(駐留集)大小(以千字節爲單位的進程)。

要在bash(有點生疏抱歉)總括起來

#!/bin/bash 

total=0 
for i in `ps -C php-cgi -o rss=` 
do 
    total=$(($total + $i)) 
done 
echo "Memory usage: $total kb" 

# Output: Memory usage: 4540 kb 

一個內膽:

total=0; for i in `ps -C php-cgi -o rss=`; do total=$(($total+$i)); done; echo "Memory usage: $total kb"; 

我知道內存部分的可靠性PS的質疑,但至少它可以讓你瞭解使用情況。

4

除了上面顯示的內置命令之外,您可以使用XHProf來分析腳本,使用XHGui可以在不錯的瀏覽器應用程序中顯示分析結果。您可以深入瞭解您的方法如何使用內存以及應用程序中內存使用率的高峯。