百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> 对于PHP进程防止内存溢出的排查
分享文章到:

对于PHP进程防止内存溢出的排查

发布时间:09/01 来源:未知 浏览: 关键词:

PHP进程内存大小是可以设定的,默许在配置文件 memory_limit=128M

也可以在程序中动态设定 ini_set('memory_limit', '1024M');这样就设定成1G了。但是一样不会这样设定,究竟会影响到机器的其他效劳。有时候可以排查一下代码,许多时候内存溢出是由于php变量没有及时开释,或者遍历比力大的数组时显现。

1.排查

memory_get_usage() php有这个系统函数,可以得到当前进程使用了多少内存空间。返回是字节单位round(memory_get_usage()/1024/1024, 2).'MB',转换为MB.

可以追踪代码施行历程中内存的转变。

2.常见内存溢出的案例

遍历大型数组,修改数组的某些值,致使遍历历程数组复制一份。

php变量的特点是“写时复制”,

当触及$arr数组赋值时,会发生分裂,生成新的HashTable构造体,致使内存占用瞬时变大

3.遍历赋值其他变量

$arr = range(0, 599999);
echo 'foreach前内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
foreach($arr as $key => $item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo 'foreach中内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
    }
}
echo 'foreach后内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';

//输出
/*
foreach前内存:49.9MB
foreach中内存:81.36MB
foreach中内存:84.42MB
foreach中内存:87.47MB
foreach中内存:90.52MB
foreach中内存:93.57MB
foreach中内存:96.62MB
foreach后内存:49.9MB
*/

解决办法,采纳援用遍历

$arr = range(0, 599999);
echo 'foreach前内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';

foreach($arr as $key => &$item) {
    $arr[$key] = $item + 1;
    if($item % 100000 == 0) {
        echo 'foreach中内存:'.round(memory_get_usage()/1024/1024, 2).'MB', '<br/>';
    }
}unset($key);unset($item);

遍历完成跋文得unset($key);unset($item); 由于$item是对数组最后一个元素的援用,后面假如修改这个变量,会直接修改到数组。

引荐:《PHP视频教程》

以上就是关于PHP进程防止内存溢出的排查的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有152人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板