为什么PHP中的数组()会泄漏内存?
根据我的xdebug输出,is_array()泄漏作为参数传递给它的内存量。如果我给它传递一个大数组,它会泄漏大量内存,只是为了检查它是否是数组 有解决办法吗为什么PHP中的数组()会泄漏内存?,php,Php,根据我的xdebug输出,is_array()泄漏作为参数传递给它的内存量。如果我给它传递一个大数组,它会泄漏大量内存,只是为了检查它是否是数组 有解决办法吗 17.4313 21858520 +70004 -> is_array() [...]/app/app_model.php:526 以下是导致泄漏的代码片段: $ret = $this->behaviors[$b[$i]]->afterFind($thi
17.4313 21858520 +70004 -> is_array() [...]/app/app_model.php:526
以下是导致泄漏的代码片段:
$ret = $this->behaviors[$b[$i]]->afterFind($this, $results, true);
if (is_array($ret)) {
$results = $ret;
}
我在Linux上运行这个(Ubuntu 9.04)
PHP:5.3.2
xdebug:2.0.5
uname-a给了我以下信息:
Linux linux8 2.6.28-19-server#64 Ubuntu SMP Wed Aug 18 21:57:33 UTC 2010 i686 GNU/Linux可能是一个合适的解决方案。最好的办法是提交一个修补程序来修复bug,但这可能超出了您的合同范围。我的第一反应:
我的第二个反应是:
你可以总结三件事:
- 一个广泛传播的软件(
)坏了-你是第一个注意到的is_array
- xdebug is break在没有泄漏的情况下报告泄漏
- xdebug和PHP不能很好地协同工作,因为它们涉及内存管理
$arr = array_fill( 0, 10000, "content" );
$mallocbytes=true;// set to true to get process
$usage=memory_get_usage(!$mallocbytes);
for( $i=0; $i!=1000000; $i=$i+1) {
is_array($arr);
$newusage=memory_get_usage(!$mallocbytes);
if( $newusage != $usage ) {
print( "diff after $i'th is_array: ".($newusage-$usage)."\n" );
}
$usage=$newusage;
}
看看PHP运行时的实际内存消耗情况。我打赌它不会增长。我想你忘了指定PHP版本和代码,这应该与这次泄漏有关<代码>插入phpjoke()什么是“内存泄漏”?调用后内存没有回收?我无法在这里复制:您是否启用了
xdebug.collect_params
,如果禁用它会发生什么?检查:否,collect params似乎不是罪魁祸首,我无法复制它。可能需要一些版本号(PHP&xdebug)、操作系统和特定的测试脚本。如果您想知道会发生什么,只需查看源代码:运行示例后,我相信问题出在xdebug中,而不是在PHP运行时。