php5.2.0内存管理改进

 更新时间:2007年01月22日 00:00:00   作者:  
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获取错误信息的方法

    这篇文章主要介绍了php获取错误信息的方法,涉及php针对错误处理的常用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • php代码运行时间查看类代码分享

    php代码运行时间查看类代码分享

    php代码运行时间查看类代码,主要是用来查看php代码的运行时间。
    2011-08-08
  • PHP获取特殊时间戳的方法整理

    PHP获取特殊时间戳的方法整理

    时间在我们日常的代码编写中会是经常出现的筛选或排序条件,尤其是一些特殊时间节点的时间显得尤为突出。今天对部分相对简便的方法进行了部分整理,需要的可以参考一下
    2023-01-01
  • php访问对象中的成员的实例方法

    php访问对象中的成员的实例方法

    在本篇文章里小编给大家整理了一篇关于php访问对象中的成员的实例方法,有需要的朋友们可以跟着学习参考下。
    2021-10-10
  • PHP中功能强大却很少使用的函数实例小结

    PHP中功能强大却很少使用的函数实例小结

    这篇文章主要介绍了PHP中功能强大却很少使用的函数,结合实例形式总结分析了php中非常实用的几个函数,包括函数的调用、注册、调用、判断等操作技巧,需要的朋友可以参考下
    2016-11-11
  • PHP保存Base64图片base64_decode的问题整理

    PHP保存Base64图片base64_decode的问题整理

    在本篇文章里小编给大家整理的是关于PHP保存Base64图片base64_decode的问题,需要的朋友们参考下。
    2019-11-11
  • 教你在PHPStorm中配置Xdebug

    教你在PHPStorm中配置Xdebug

    这篇文章主要介绍了教你在PHPStorm中配置Xdebug的相关资料,需要的朋友可以参考下
    2015-07-07
  • php短网址和数字之间相互转换的方法

    php短网址和数字之间相互转换的方法

    这篇文章主要介绍了php短网址和数字之间相互转换的方法,涉及php操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • php实现session自定义会话处理器的方法

    php实现session自定义会话处理器的方法

    这篇文章主要介绍了php实现session自定义会话处理器的方法,可通过设置session.save_handler为user来调用自定义的回调函数,从而实现session自定义会话处理器的功能,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • php判断表是否存在的方法

    php判断表是否存在的方法

    这篇文章主要介绍了php判断表是否存在的方法,实例分析了三种常见的判断表的方法,涉及php操作数据库的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论