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生成静态页
Nov 25 PHP
PHP与C#分别格式化文件大小的代码
May 14 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
smarty表格换行实例
Dec 15 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
php从数据库读取数据,并以json格式返回数据的方法
Aug 21 PHP
详解php用static方法的原因
Sep 12 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
PHP项目多语言配置平台实现过程解析
May 18 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实现文件下载详解
2014/11/27 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
js实现ArrayList功能附实例代码
2014/10/29 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
HTML中使背景图片自适应浏览器大小实例详解
2017/04/06 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
python实现简单名片管理系统
2018/11/30 Python
对python中的six.moves模块的下载函数urlretrieve详解
2018/12/19 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
python爬取天气数据的实例详解
2020/11/20 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
行政主管岗位职责
2013/11/18 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
护士医德医风自我评价
2014/09/15 职场文书
美容院合作经营协议书
2014/10/10 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
《秋思》教学反思
2016/02/23 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
Python Numpy库的超详细教程
2022/04/06 Python