获取PHP中使用内存的全部细节

获取PHP中使用内存的全部细节,php,memory,Php,Memory,我有一个PHP脚本失败,出现了致命的内存不足错误。它是一个处理数据库中所有记录的脚本,最多可处理约10k条记录,然后出现内存错误 但是,我无法找出是什么在占用我的应用程序内存 我已经检查了$\u GLOBALS数组,该数组大约占1MB 我在不同的地方检查了调用堆栈,没有发现任何意外情况 PHP加上所有相关类文件等的基本内存需求约为7MB 我的感觉是,代码中可能存在导致变量引用持久化的地方——要么是故意的(例如,通过某个类或其他类中的静态缓存),要么是错误的(例如,没有释放资源句柄) 显然,像me

我有一个PHP脚本失败,出现了致命的内存不足错误。它是一个处理数据库中所有记录的脚本,最多可处理约10k条记录,然后出现内存错误

但是,我无法找出是什么在占用我的应用程序内存

我已经检查了
$\u GLOBALS
数组,该数组大约占1MB

我在不同的地方检查了调用堆栈,没有发现任何意外情况

PHP加上所有相关类文件等的基本内存需求约为7MB

我的感觉是,代码中可能存在导致变量引用持久化的地方——要么是故意的(例如,通过某个类或其他类中的静态缓存),要么是错误的(例如,没有释放资源句柄)

显然,像
memory\u get\u usage()
这样的函数可以告诉我在脚本的任何给定点上使用了多少内存,跟踪这是一种缓慢但有效的调试方法。然而,是否有任何方法可以获得关于内存实际使用情况的详细信息

乐于接受使用外部工具(如XDebug)的答案,前提是这些工具提供有用的输出(即识别类/变量名称而不是使用PHPs内部ID的输出)。我期望的输出类似于您从
var\u dump
/
print\r
获得的输出


[请注意,这个问题不是关于如何调试内存不足的问题,而是关于是否有一种方法可以在调试时公开内存使用的细节。]

Paul Crovella提供了一个链接,但不愿意将其作为答案发布,所以我为他做了这件事

phpmemprof扩展()提供了许多工具,可以用来精确地提供问题所要求的信息

从自述文件:

PHPMemprof描述了php脚本的内存使用情况,特别是可以判断哪个函数分配了当前分配的每个字节的内存

可以通过调用Memprof_enable()在脚本执行期间启用Memprof

然后,可以通过调用memprof_dump_函数之一转储内存使用情况。这两个函数都说明哪些函数分配了当前分配的所有内存

最初的问题要求类似于
print\u r()
,这是由
memprof\u dump\u array()
函数提供的。但是,还有许多其他访问内存配置文件的方法,这些方法可能更有用,具体取决于您试图实现的目标,包括以callgrind格式转储整个内存映射以进行脱机分析


由于它是一个PHP扩展,需要访问PHP.ini才能安装,因此它可能不适合在实时站点上调试问题(但没有人这样做,对吧?)。

可能对您有用。乍一看,这看起来很有希望!你为什么把这篇文章作为评论而不是答案发表?在这里把一个链接作为答案是不合适的,正确的答案应该包括一个解释和如何使用它来处理你的问题的例子,我简直不能生气。这就是精神所在!:-)