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如何得到当前页和上一页的地址?
Nov 27 PHP
php+mysql分页代码详解
Mar 27 PHP
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
基于curl数据采集之单页面采集函数get_html的使用
Apr 28 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
PHP实现文件下载详解
Nov 27 PHP
yii的CURD操作实例详解
Dec 04 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
php7 安装yar 生成docker镜像
May 09 PHP
在laravel中使用with实现动态添加where条件
Oct 10 PHP
tp5修改(实现即点即改)
Oct 18 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
Jquery AJAX POST与GET之间的区别
2013/11/14 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
Python新手实现2048小游戏
2015/03/31 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
深入了解Python 方法之类方法 &amp; 静态方法
2020/08/17 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
哈理工毕业生的求职信
2013/12/22 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
职业生涯规划书前言
2014/04/15 职场文书
美国留学经济担保书
2014/05/20 职场文书
初一新生军训方案
2014/05/22 职场文书
希特勒的演讲稿
2014/05/23 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
技术股东合作协议书
2014/12/02 职场文书
男方婚前保证书
2015/02/28 职场文书
应收账款管理制度
2015/08/06 职场文书
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技