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开发自学 内存溢出
抱歉,评论功能暂时关闭!