如何获知PHP程序占用多少内存(memory_get_usage)


Posted in PHP onSeptember 23, 2012

下面是使用示例:

<?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)),也就是当时 PHP 脚本使用的内存(不含 memory_get_usage() 函数本身占用的内存)。

由上面的例子可以看出,要想减少内存的占用,可以使用 PHP unset() 函数把不再需要使用的变量删除。类似的还有:PHP mysql_free_result() 函数,可以清空不再需要的查询数据库得到的结果集,这样也能得到更多可用内存。

PHP memory_get_usage() 函数还可以有个参数,$real_usage,其值为布尔值。默认为 FALSE,表示得到的内存使用量不包括该函数(PHP 内存管理器)占用的内存;当设置为 TRUE 时,得到的内存为不包括该函数(PHP 内存管理器)占用的内存。

所以在实际编程中,可以用 memory_get_usage() 函数比较各个方法占用内存的高低,来选择使用哪种占用内存小的方法。

贴个使用函数:

if (!function_exists('memory_get_usage')) 
{ 
/** 
+---------------------------------------------------------- 
* 取得内存使用情况 
+---------------------------------------------------------- 
* @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; 
} 
} 
}

再来个函数使用例子:
<?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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
Cakephp 执行主要流程
Mar 24 PHP
PHP采集利器 Snoopy 试用心得
Jul 03 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
php获取POST数据的三种方法实例详解
Dec 20 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 #PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 #PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
Sep 23 #PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 #PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
Sep 23 #PHP
PHP+MySQL投票系统的设计和实现分享
Sep 23 #PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 #PHP
You might like
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
跟我学Nodejs(三)--- Node.js模块
2014/05/25 NodeJs
js验证上传图片的方法
2015/05/12 Javascript
jQuery实现折叠、展开的菜单组效果代码
2015/09/16 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
微信小程序实现多选功能
2018/11/04 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
python实现将内容分行输出
2015/11/05 Python
深入理解python中的浅拷贝和深拷贝
2016/05/30 Python
Python科学计算之Pandas详解
2017/01/15 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
python使用PyCharm进行远程开发和调试
2017/11/02 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
如何正确理解python装饰器
2021/06/15 Python