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生成excel时单元格内换行问题的解决方法
Aug 26 PHP
浅析php中jsonp的跨域实例
Jun 21 PHP
php class类的用法详细总结
Oct 17 PHP
PHP文件锁定写入实例解析
Jul 14 PHP
php实现按照权重随机排序数据的方法
Jan 09 PHP
PHP抽奖算法程序代码分享
Oct 08 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
Oct 25 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 PHP
php优化查询foreach代码实例讲解
Mar 24 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
简单的页面缓冲技术
2006/10/09 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
PHP中的替代语法介绍
2015/01/09 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
Microsfot .NET Framework4.0框架 安装失败的解决方法
2013/08/14 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
关于js对textarea换行符的处理方法浅析
2018/08/03 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
浅析使用Python操作文件
2017/07/31 Python
Python中static相关知识小结
2018/01/02 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
自考生自我鉴定范文
2013/10/01 职场文书
班主任寄语大全
2014/04/04 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
作弊检讨书
2015/01/27 职场文书
java实现对Hadoop的操作
2021/07/01 Java/Android
MySQL如何使备份得数据保持一致
2022/05/02 MySQL