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 相关文章推荐
js下函数般调用正则的方法附代码
Jun 22 PHP
php 中文处理函数集合
Aug 27 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
php在数组中查找指定值的方法
Mar 17 PHP
PHP实现长文章分页实例代码(附源码)
Feb 03 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
php跨站攻击实例分析
2014/10/28 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
基于并发服务器几种实现方法(总结)
2017/12/29 Python
django Serializer序列化使用方法详解
2018/10/16 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
面试求职的个人自我评价
2013/11/16 职场文书
优秀党员主要事迹
2014/01/19 职场文书
端午节活动策划方案
2014/03/09 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
工程质量承诺书
2014/03/27 职场文书
高中班级口号
2014/06/09 职场文书
质量负责人岗位职责
2015/02/15 职场文书