如何獲知PHP程序占用多少內(nèi)存(memory_get_usage)
更新時(shí)間:2012年09月23日 22:54:08 作者:
想要知道編寫的 PHP 腳本需要占用多少內(nèi)存么?很簡(jiǎn)單,直接使用 PHP 查看當(dāng)前分配給 PHP 腳本的內(nèi)存的函數(shù) memory_get_usage() 就可以了
下面是使用示例:
<?php
echo memory_get_usage(), '<br />'; // 313864
$tmp = str_repeat('http://www.nowamagic.net/', 4000);
echo memory_get_usage(), '<br />'; // 406048
unset($tmp);
echo memory_get_usage(); // 313952
?>
上面的程序后面的注釋代表了它們的輸出(單位為 byte(s)),也就是當(dāng)時(shí) PHP 腳本使用的內(nèi)存(不含 memory_get_usage() 函數(shù)本身占用的內(nèi)存)。
由上面的例子可以看出,要想減少內(nèi)存的占用,可以使用 PHP unset() 函數(shù)把不再需要使用的變量刪除。類似的還有:PHP mysql_free_result() 函數(shù),可以清空不再需要的查詢數(shù)據(jù)庫(kù)得到的結(jié)果集,這樣也能得到更多可用內(nèi)存。
PHP memory_get_usage() 函數(shù)還可以有個(gè)參數(shù),$real_usage,其值為布爾值。默認(rèn)為 FALSE,表示得到的內(nèi)存使用量不包括該函數(shù)(PHP 內(nèi)存管理器)占用的內(nèi)存;當(dāng)設(shè)置為 TRUE 時(shí),得到的內(nèi)存為不包括該函數(shù)(PHP 內(nèi)存管理器)占用的內(nèi)存。
所以在實(shí)際編程中,可以用 memory_get_usage() 函數(shù)比較各個(gè)方法占用內(nèi)存的高低,來(lái)選擇使用哪種占用內(nèi)存小的方法。
貼個(gè)使用函數(shù):
if (!function_exists('memory_get_usage'))
{
/**
+----------------------------------------------------------
* 取得內(nèi)存使用情況
+----------------------------------------------------------
* @return integer
+----------------------------------------------------------
*/
function memory_get_usage()
{
$pid = getmypid();
if (IS_WIN)
{
exec('tasklist /FI "PID eq ' . $pid . '" /FO LIST', $output);
return preg_replace('/[^0-9]/', '', $output[5]) * 1024;
}
else
{
exec("ps -eo%mem,rss,pid | grep $pid", $output);
$output = explode(" ", $output[0]);
return $output[1] * 1024;
}
}
}
再來(lái)個(gè)函數(shù)使用例子:
<?php
//memory_get_usage();
$m1 = memory_get_usage();
echo '<br /> m1:',$m1;//58096
$a = 'hello';
$b = str_repeat($a,1000);
$m2 = memory_get_usage();
echo '<br /> m2:',$m2;//63424
unset($b);
$m3 = memory_get_usage();
echo '<br /> m3:',$m3;//58456
?>
復(fù)制代碼 代碼如下:
<?php
echo memory_get_usage(), '<br />'; // 313864
$tmp = str_repeat('http://www.nowamagic.net/', 4000);
echo memory_get_usage(), '<br />'; // 406048
unset($tmp);
echo memory_get_usage(); // 313952
?>
上面的程序后面的注釋代表了它們的輸出(單位為 byte(s)),也就是當(dāng)時(shí) PHP 腳本使用的內(nèi)存(不含 memory_get_usage() 函數(shù)本身占用的內(nèi)存)。
由上面的例子可以看出,要想減少內(nèi)存的占用,可以使用 PHP unset() 函數(shù)把不再需要使用的變量刪除。類似的還有:PHP mysql_free_result() 函數(shù),可以清空不再需要的查詢數(shù)據(jù)庫(kù)得到的結(jié)果集,這樣也能得到更多可用內(nèi)存。
PHP memory_get_usage() 函數(shù)還可以有個(gè)參數(shù),$real_usage,其值為布爾值。默認(rèn)為 FALSE,表示得到的內(nèi)存使用量不包括該函數(shù)(PHP 內(nèi)存管理器)占用的內(nèi)存;當(dāng)設(shè)置為 TRUE 時(shí),得到的內(nèi)存為不包括該函數(shù)(PHP 內(nèi)存管理器)占用的內(nèi)存。
所以在實(shí)際編程中,可以用 memory_get_usage() 函數(shù)比較各個(gè)方法占用內(nèi)存的高低,來(lái)選擇使用哪種占用內(nèi)存小的方法。
貼個(gè)使用函數(shù):
復(fù)制代碼 代碼如下:
if (!function_exists('memory_get_usage'))
{
/**
+----------------------------------------------------------
* 取得內(nèi)存使用情況
+----------------------------------------------------------
* @return integer
+----------------------------------------------------------
*/
function memory_get_usage()
{
$pid = getmypid();
if (IS_WIN)
{
exec('tasklist /FI "PID eq ' . $pid . '" /FO LIST', $output);
return preg_replace('/[^0-9]/', '', $output[5]) * 1024;
}
else
{
exec("ps -eo%mem,rss,pid | grep $pid", $output);
$output = explode(" ", $output[0]);
return $output[1] * 1024;
}
}
}
再來(lái)個(gè)函數(shù)使用例子:
復(fù)制代碼 代碼如下:
<?php
//memory_get_usage();
$m1 = memory_get_usage();
echo '<br /> m1:',$m1;//58096
$a = 'hello';
$b = str_repeat($a,1000);
$m2 = memory_get_usage();
echo '<br /> m2:',$m2;//63424
unset($b);
$m3 = memory_get_usage();
echo '<br /> m3:',$m3;//58456
?>
您可能感興趣的文章:
- PHP中使用unset銷毀變量并內(nèi)存釋放問(wèn)題
- 深入探討PHP中的內(nèi)存管理問(wèn)題
- 解析PHP中的內(nèi)存管理,PHP動(dòng)態(tài)分配和釋放內(nèi)存
- 解析PHP中的unset究竟會(huì)不會(huì)釋放內(nèi)存
- PHP通過(guò)內(nèi)置函數(shù)memory_get_usage()獲取內(nèi)存使用情況
- php頁(yè)面消耗內(nèi)存過(guò)大的處理辦法
- PHP內(nèi)存使用情況如何獲取
- PHP管理內(nèi)存函數(shù) memory_get_usage()使用介紹
- php在windows環(huán)境下獲得cpu內(nèi)存實(shí)時(shí)使用率(推薦)
- php查詢內(nèi)存信息操作示例
相關(guān)文章
PHP中的print_r 與 var_dump 輸出數(shù)組
下面小編就為大家?guī)?lái)一篇PHP中的print_r 與 var_dump 輸出數(shù)組。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考2016-06-06php中array_multisort對(duì)多維數(shù)組排序的方法
這篇文章主要介紹了php中array_multisort對(duì)多維數(shù)組排序的方法,涉及php遍歷數(shù)組及使用array_multisort進(jìn)行數(shù)組排序的相關(guān)技巧,需要的朋友可以參考下2015-07-07基于遞歸實(shí)現(xiàn)的php樹(shù)形菜單代碼
這篇文章主要介紹了基于遞歸實(shí)現(xiàn)的php樹(shù)形菜單代碼,采用了遞歸的方法遍歷節(jié)點(diǎn)構(gòu)造出樹(shù)形菜單,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11PHP變量作用域(全局變量&局部變量)&global&static關(guān)鍵字用法實(shí)例分析
這篇文章主要介紹了PHP變量作用域(全局變量&局部變量)&global&static關(guān)鍵字用法,結(jié)合實(shí)例形式分析了PHP全局變量與局部變量的作用域,以及global、static關(guān)鍵字功能與使用技巧,需要的朋友可以參考下2020-01-01常見(jiàn)的PHP五種設(shè)計(jì)模式小結(jié)
設(shè)計(jì)模式 一書將設(shè)計(jì)模式引入軟件社區(qū),該書的作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗稱 “四人幫”)。2011-03-03MySQL 日期時(shí)間函數(shù)常用總結(jié)
MySQL 日期時(shí)間函數(shù)常用總結(jié),需要的朋友可以參考下2012-06-06