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 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
Jul 01 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
php支付宝APP支付功能
Jul 29 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 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
外媒评选出10支2020年最受欢迎的Dota2战队
2021/03/05 DOTA
基于mysql的论坛(3)
2006/10/09 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
2013/06/28 PHP
php操作mongoDB实例分析
2014/12/29 PHP
PHP 断点续传实例详解
2017/11/11 PHP
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
Python Flask-web表单使用详解
2017/11/18 Python
一道python走迷宫算法题
2018/01/22 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
事业单位竞聘上岗实施方案
2014/03/28 职场文书
希特勒的演讲稿
2014/05/23 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python