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 相关文章推荐
我的论坛源代码(五)
Oct 09 PHP
珊瑚虫IP库浅析
Feb 15 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
php 可变函数使用小结
Jun 12 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 PHP
php 中的信号处理操作实例详解
Mar 04 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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学习笔记之数组篇
2011/06/28 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
Python学习笔记(二)基础语法
2014/06/06 Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
github配置使用指南
2014/11/18 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
kafka-python批量发送数据的实例
2018/12/27 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
pytorch加载自定义网络权重的实现
2020/01/07 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
python新手学习可变和不可变对象
2020/06/11 Python
python中的错误如何查看
2020/07/08 Python
浅析Python 责任链设计模式
2020/09/11 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
单位绩效考核方案
2014/05/11 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android