php5.2.0内存管理改进


Posted in PHP onJanuary 22, 2007

php5.2.0的内存管理做了较大的改进,某些情况下内存不能释放的问题不存在了。
测试php脚本(mem.php),我用echo N>>和sleep来控制脚本在某个阶段暂停以便检测状态。

<?php  
echo '1>>';  
sleep(5);  $o = array();  
for ($i=0;$i<=100000;$i++) {  
    $o[]='aaaaaaaaaaaaaaaaaaaaa';  
}  
echo '2>>';  
sleep(5);  
unset($o);  
echo '3>>';  
while (true) {  
    echo '..';  
    sleep(10);  
}  
?> 
监测内存使用情况的bash script(注意:里面的”mem”是取自上面的php脚本名):

while true;do clear;ps au|grep -v "\(vi\|grep\)"|grep "\(mem\|RSS\)";sleep 2;done;
以下是$/usr/local/bin/php mem.php这个进程在三种状态(数组创建前,数组创建后,数组销毁后)下,用5.1.6和5.2.0的PHP(我使用了一样的configure参数)测试的RSS(内存使用值,单位KB)结果。

php5.1.6:
3164
18076
17572

PHP5.2.0:
4088
14400
4424
大家可以看到5.1.6这个版本,unset数组之后,内存并没有从进程里释放出来,虽然它是可以继续被这个php进程再利用,但是却无法被系统的其他进程所使用。而5.2.0则真正释放出了内存。

大家可能还注意到,在最开始,5.2.0的内存使用比5.1.6多了几个kb,这是由于5.2.0增加了一些新的东西,这个是很正常的。

另外php5.2.0的内存分配也进行了大的改进,官方的说法是对memory_limit的检测由每次呼叫emalloc()的时候进行改为直接检测从系统请求的内存数据块(blocks)。需要更进一步了解的朋友可以自己去研究代码。而由于内存分配的实现的更改,内存控制可以更精确地被控制在memory_limit之下,也就是说以前php代码里,如果有超过了memory_limit的内存使用而没有出错的,在php5.2.0里可能会报错。为了平衡这次改进,PHP5.2.0的默认的memory_limit由以前的8MB改为了16MB.搜索源代码可以看到这个修改(find . -name \*c -type f |xargs cat |grep memory_limit)。 

PHP 相关文章推荐
PHP中调用JAVA
Oct 09 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
提高PHP性能的编码技巧以及性能优化详细解析
Aug 24 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
Nov 14 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
PHP基于phpqrcode类生成二维码的方法详解
Mar 14 PHP
laravel框架 laravel-admin上传图片到oss的方法
Oct 13 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
php中截取字符串支持utf-8
Jan 18 #PHP
php中的登陆login
Jan 18 #PHP
php中的时间显示
Jan 18 #PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 #PHP
php批量删除数据
Jan 18 #PHP
mysql 的 like 问题,超强毕杀记!!!
Jan 18 #PHP
一个更简单的无限级分类菜单代码
Jan 16 #PHP
You might like
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
乐信RP2100的电路分析和打磨
2021/03/02 无线电
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
php PDO异常处理详解
2016/11/20 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
js格式化时间的方法
2015/12/18 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
vue webpack打包优化操作技巧
2018/02/22 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
python 函数中的参数类型
2020/02/11 Python
Python新手如何理解循环加载模块
2020/05/29 Python
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
护士岗位求职应聘自荐书范文
2014/02/12 职场文书
2014年党务公开方案
2014/05/08 职场文书
植树节标语
2014/06/27 职场文书
贷款承诺书
2015/01/20 职场文书
银行工作心得体会范文
2016/01/23 职场文书
合作协议书格式范本
2016/03/21 职场文书
斗罗大陆八大特殊魂兽,龙族始祖排榜首,第五最残忍(翠魔鸟)
2022/03/18 国漫