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 24 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
Nov 07 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
PHP整合PayPal支付
Jun 11 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
Yii框架的布局文件实例分析
Sep 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
杏林同学录(七)
2006/10/09 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
PHP最常用的正则表达式
2017/02/13 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
jQuery中:password选择器用法实例
2015/01/03 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
python批量导出导入MySQL用户的方法
2013/11/15 Python
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
python实现中文转换url编码的方法
2016/06/14 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
中学生期末评语
2014/02/03 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
工作会议方案
2014/05/21 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
房屋维修申请报告
2015/05/18 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
详解nginx进程锁的实现
2021/06/14 Servers