php5.2.0内存管理改进
2015-01-24信息快讯网
测试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的session cookie错误
PHP 5.3.0 安装分析心得
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
PHP 翻页 实例代码
Windows PHP5和Apache的安装与配置
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
apache2.2.4+mysql5.0.77+php5.2.8安装精简
用mysql内存表来代替php session的类
PHP 面向对象改进后的一点说明第1/2页
PHP令牌 Token改进版
php中通过smtp发邮件的类,测试通过
php中截取字符串支持utf-8
php中的登陆login
php中的时间显示
解决phpmyadmin中文乱码问题。。。
php批量删除数据
PHP5 安装方法
php5.2时间相差8小时
IIS环境下快速安装、配置和调试PHP5.2.0
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
用 PHP5 轻松解析 XML
一个改进的UBB类
改进的IP计数器