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之第一天
Oct 09 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
详解PHP中的Traits
Jul 29 PHP
PHP实现支付宝即时到账功能
Dec 21 PHP
php出租房数据管理及搜索页面
May 23 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
php实现微信企业转账功能
Oct 02 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 PHP
php libevent 功能与使用方法详解
Mar 04 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提取中文首字母
2008/04/09 PHP
PHP调用MySQL的存储过程的实现代码
2008/08/12 PHP
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
浅析Ajax语法
2016/12/05 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
js判断在哪个浏览器打开项目的方法
2020/01/21 Javascript
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
Python爬取三国演义的实现方法
2016/09/12 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
python实现狄克斯特拉算法
2019/01/17 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
请说出几个常用的异常类
2013/01/08 面试题
小学评语大全
2014/04/22 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
Python 文字识别
2022/05/11 Python