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)。 

相关文章

  • 详解WordPress中创建和添加过滤器的相关PHP函数

    详解WordPress中创建和添加过滤器的相关PHP函数

    这篇文章主要介绍了WordPress中创建和添加过滤器的相关PHP函数,分别是apply_filters()函数和add_filter()函数的使用,需要的朋友可以参考下
    2015-12-12
  • PHP实现的简单AES加密解密算法实例

    PHP实现的简单AES加密解密算法实例

    这篇文章主要介绍了PHP实现的简单AES加密解密算法,结合具体实例形式分析了php基于mcrypt_encrypt、bin2hex、mcrypt_decrypt等方法进行字符串加密解密的相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • PHP平滑关闭/重启的实现方法

    PHP平滑关闭/重启的实现方法

    "平滑重启"和"快速重启"是两种不同的概念,下面这篇文章主要给大家介绍了关于PHP平滑关闭/重启的实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • PHP设计模式 注册表模式(多个类的注册)

    PHP设计模式 注册表模式(多个类的注册)

    注册表模式其实是一个单例模式,注册表类提供静态方法(或单例对象的实例化方法)来让其它对象访问其中的数据(通常是对象)。整个系统中的每个对象都可以访问这些数据对象
    2012-02-02
  • PHP连接MongoDB示例代码

    PHP连接MongoDB示例代码

    这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017,如果端口是27017,端口可以省略
    2012-09-09
  • discuz程序的PHP加密函数原理分析

    discuz程序的PHP加密函数原理分析

    康盛的 authcode 函数可以说对中国的PHP界作出了重大贡献。包括康盛自己的产品,以及大部分中国使用PHP的公司都用这个函数进行加密,authcode 是使用异或运算进行加密和解密。
    2011-08-08
  • php下将XML转换为数组

    php下将XML转换为数组

    PHP XML To Array,将XML转换为数组,需要的朋友可以参考下。
    2010-01-01
  • php实现的简单检验登陆类

    php实现的简单检验登陆类

    这篇文章主要介绍了php实现的简单检验登陆类,可实现基本的php数据库查询及密码匹配的功能,需要的朋友可以参考下
    2015-06-06
  • PHP生成可点击刷新的验证码简单示例

    PHP生成可点击刷新的验证码简单示例

    这篇文章主要介绍了PHP生成可点击刷新的验证码,结合简单实例形式分析了php验证码的实现与调用显示方法,涉及js动态调用验证码php文件的相关技巧,需要的朋友可以参考下
    2016-05-05
  • php魔术函数__call()用法实例分析

    php魔术函数__call()用法实例分析

    这篇文章主要介绍了php魔术函数__call()用法,实例分析了__call()函数的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02

最新评论