我目前有一个广泛使用Zend Framework的PHP CLI脚本,它似乎在运行时使用了更大量的内存。它循环遍历从数据库中检索的大量模型,批量为1000.调用memory_get_usage()
表示脚本的内存使用量总是在增加。
尽管我确保在每次迭代后都没有设置模型,并且实际上使用array_shift()
来减少每次迭代时模型数组的大小。
我的问题是,在PHP中是否有一种方法可以发现变量的内存大小,以便跟踪正在增长的内容?
答案 0 :(得分:4)
我没有检查每个变量大小的解决方案,但是如果你使用doctrine可能是原因
你需要使用
$Elem->free(true);
另一件事是升级到5.3(如果你还没有这样做),5.3的garbage collector更好
答案 1 :(得分:3)
没有。您可能正在寻找未释放的内存,例如您取消链接变量或删除了引用,garbage collector尚未在内存中释放关联的块。
您可以尝试使用Zend Server 5(您需要商业版)来记录您的应用程序。它有code tracing。我不知道这是否会让你发现内存泄漏。
另见:
答案 2 :(得分:0)
我不知道它有多准确,但我使用apc_add('variable_name', $var);
获得了一个数字。然后我转到用户缓存条目下的apc.php
并查看大小列。
当然,要实现此功能,您需要安装并运行APC。 : - )
答案 3 :(得分:-2)
以下是我在weberdev
找到的代码段<?php
function array_size($a){
$size = 0;
while(list($k, $v) = each($a)){
$size += is_array($v) ? array_size($v) : strlen($v);
}
return $size;
}
?>
它以字节为单位获取给定数组的大小。这是你的意思吗?