【发布时间】:2014-09-07 16:57:14
【问题描述】:
我的脚本中存在内存泄漏,我在 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的内存?
【问题讨论】:
-
unset 不会立即释放变量正在使用的内存,php 垃圾收集器会这样做
-
您使用什么版本的 PHP? 5.3 之前的 PHP 没有循环收集机制。另请阅读:php.net/manual/en/features.gc.collecting-cycles.php
-
我使用的是 5.5 版
-
@Dagon PHP 在函数结束时释放内存,因此
the_loop() -
@Linksku "PHP 在函数结束时释放内存" 你能找到该声明的来源吗?
标签: php memory memory-leaks xdebug