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安装为Apache DSO
Oct 09 PHP
用文本文件制作留言板提示(上)
Oct 09 PHP
php类
Nov 27 PHP
php xfocus防注入资料
Apr 27 PHP
php smarty模版引擎中的缓存应用
Dec 11 PHP
超小PHP小马小结(方便查找后门的朋友)
May 05 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
PHP将回调函数作用到给定数组单元的方法
Aug 19 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
在laravel中实现事务回滚的方法
Oct 10 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 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 连接mysql连接被重置的解决方法
2011/02/15 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
Python 字典与字符串的互转实例
2017/01/13 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
python实现视频分帧效果
2019/05/31 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
入党申请书自我鉴定
2013/10/12 职场文书
求职信范文大全
2014/05/26 职场文书
高中同学会活动方案
2014/08/14 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
 Python 中 logging 模块使用详情
2022/03/03 Python