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 Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
简单的php中文转拼音的实现代码
Feb 11 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
ThinkPHP查询中的魔术方法简述
Jun 25 PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
实例解析php的数据类型
Oct 24 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
Mar 22 PHP
PHP日期和时间函数的使用示例详解
Aug 06 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
PHP 创建标签云函数代码
2010/05/26 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
python3.3实现乘法表示例
2014/02/07 Python
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
python匿名函数用法实例分析
2019/08/03 Python
Python(PyS60)实现简单语音整点报时
2019/11/18 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
使用Python实现音频双通道分离
2020/12/25 Python
python爬取微博评论的实例讲解
2021/01/15 Python
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
大课间体育活动方案
2014/03/12 职场文书
新闻报道策划方案
2014/06/11 职场文书