关于PHP进程防止内存溢出的排查-php教程

资源魔 69 0

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过程避免内存溢出的排查的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学 内存溢出

抱歉,评论功能暂时关闭!