Memory 如何查找php脚本的内存消耗?

Memory 如何查找php脚本的内存消耗?,memory,php,Memory,Php,我正在Linux shell上运行一个php脚本作为进程。使用不同的工具(top,xdebug,…),我看到这个非常复杂的脚本的动态内存消耗(堆内存)不断上升 我怎样才能准确地找出导致这种行为的代码行、变量或位置?php脚本的内存泄漏在哪里 其他信息: Linux版本2.6.30-gentoo-r4 PHP版本5.2.10-pl0-gentoo 我可以修改脚本 我可以使用xdebug 请给出结束此问题的原因。在可疑区域尝试此操作 echo memory_get_usage(); // Su

我正在Linux shell上运行一个php脚本作为进程。使用不同的工具(top,xdebug,…),我看到这个非常复杂的脚本的动态内存消耗(堆内存)不断上升

我怎样才能准确地找出导致这种行为的代码行、变量或位置?php脚本的内存泄漏在哪里

其他信息:

  • Linux版本2.6.30-gentoo-r4
  • PHP版本5.2.10-pl0-gentoo
  • 我可以修改脚本
  • 我可以使用xdebug

请给出结束此问题的原因。

在可疑区域尝试此操作

echo memory_get_usage();

// Suspect code here

echo memory_get_usage();

这通常是通过分析完成的。我试着用
xdebug
运行这个文件。我得到的只是一个60000行长的系统调用列表和相应的内存消耗。这并没有回答内存泄漏的确切位置。php 5.2没有垃圾收集器。每次分配内存时,它基本上都会泄漏,因为它永远不会被回收。5.3添加了一个垃圾收集器。这是否意味着如果不亲自查看所有这60000行(以及更多行),就无法回答我的问题?不幸的是,大多数语言的调试本质上是非常乏味的。如果你要做的只是“我的程序占用了很多内存”,那不一定是泄漏,它可能只是结构不好。所以,你很可能确实需要仔细观察正在发生的事情,并决定你最严重的问题是在哪里形成的。最后,在像php这样的语言中,真正的泄漏(由于丢失引用)应该是非常不寻常的,除非jordanm所说的是真的(没有GC),在这种情况下,您正在浪费时间试图阻止它们。