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中通过ADODB库实现调用Access数据库之修正版本
Dec 31 PHP
php将gd生成的图片缓存到memcache的小例子
Jun 05 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 PHP
php调用新浪短链接API的方法
Nov 08 PHP
Yii使用ajax验证显示错误messagebox的解决方法
Dec 03 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
详解PHP数组赋值方法
Nov 07 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
给大家分享几个常用的PHP函数
Jan 15 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批量去除文件UTF8 BOM信息
2013/08/05 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
JavaScript var声明变量背后的原理示例解析
2013/10/12 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
Python实现动态循环输出文字功能
2020/05/07 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫
vue实现列表垂直无缝滚动
2022/04/08 Vue.js