转储在PHP中的所有变量(Dump all variables in PHP)

2019-10-20 11:58发布

有一个在我的脚本内存泄漏和后2天,我找不到它。 我发现,是造成内存泄漏的循环; 该循环的每次迭代增加了存储器的使用。 我搬到循环到一个函数隔离的变量。 在函数的结束时,我unsetted由函数创建的每个变量,以便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的记忆?

Answer 1:

作为龙提到的取消设置不会立即释放内存。

什么是在释放内存与PHP更好:未设置()或$ VAR = NULL

我会考虑重新评估你使用PHP的方式,它不是专为长/恒速运行脚本,垃圾处理器根本就不是很大。

如果你想进一步深入到执行的脚本,我建议检查出像一些工具:

https://github.com/jokkedk/webgrind

http://xhprof.io/

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

另外值得一读: 什么gc_collect_cycles功能是有用的?



Answer 2:

调用未设置()不会强制垃圾收集,因此而引用计数应该减少有可能是别人引用它。 使用函数xdebug_debug_zval($ VAR)呼吁取消设置之前看到有多少引用它的价值其实有。



文章来源: Dump all variables in PHP