转储PHP中的所有变量


Dump all variables in PHP

我的脚本中有内存泄漏,2天后我找不到它。我发现了导致内存泄漏的循环;循环的每次迭代都会增加内存使用。我将循环移到一个函数中以隔离变量。在函数结束时,我取消了该函数创建的每个变量的设置,以便get_defined_vars()返回一个空数组。我的意思是:

function the_loop(){
  $var="value";
  ... // processing, including using a library
  unset($var);
  print_r(get_defined_vars()); // prints empty array
}
while(true){
  the_loop();
  echo memory_get_usage()."'n"; // steadily increases until memory limit is reached
}

我猜the_loop()中定义的一些变量仍然在内存中。我尝试使用XDebug的跟踪工具,但它没有帮助。它所显示的是,从长期来看,内存使用量平均会增加。我正在寻找一个工具,可以显示我所有的值在PHP的内存。我将能够根据值来识别变量。什么工具可以转储PHP的内存?

正如Dragon所说,unset不会立即释放内存。

unset()或$var = null

我会考虑重新评估你使用PHP的方式,它不是为长时间/恒定运行的脚本设计的,垃圾处理程序根本不是那么好。

如果你想更深入地研究执行脚本,我建议检查一些工具,如:

https://github.com/jokkedk/webgrind

http://xhprof.io/

http://derickrethans.nl/xdebug-and-tracing-memory-usage.html

同样值得一读:gc_collect_cycles函数有什么用?

调用unset()并不强制垃圾收集,因此当引用计数应该减少时,可能会有其他引用它。在调用unset之前使用xdebug_debug_zval($var)查看实际有多少对其值的引用。