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实现链结人气统计
Oct 09 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
php的curl实现get和post的代码
Aug 23 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
PHP闭包函数详解
Feb 13 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
May 20 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 PHP
PHP创建XML接口示例
Jul 04 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
php常用字符串比较函数实例汇总
2014/11/24 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PDO::inTransaction讲解
2019/01/28 PHP
javascript hashtable实现代码
2009/10/13 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
python多线程抓取天涯帖子内容示例
2014/04/03 Python
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
华为python面试题
2016/05/03 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
大学学年自我鉴定
2013/10/28 职场文书
个人现实表现材料
2014/02/04 职场文书
会计的岗位职责
2014/03/15 职场文书
学生评语大全
2014/04/18 职场文书
未婚证明格式
2015/06/15 职场文书
爱国主义电影观后感
2015/06/18 职场文书
素质拓展训练感想
2015/08/07 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
在Django中使用MQTT的方法
2021/05/10 Python