调试mod_php中的内存使用情况

时间:2009-10-21 22:34:13

标签: php apache memory

我有一个在apache / mod_php中运行的请求处理程序,偶尔会扩展超出允许的最大内存使用量(即php.ini中的memory_limit定义)。

处理此请求会调用proc_open()来运行外部命令。这些命令的内存使用量是否“反对”请求内存使用量?

除此之外,分析和修复在mod_php下运行的脚本的内存使用情况的首选方法是什么?我发现的关于php内存使用的所有信息似乎都是:

  • “编辑php.ini并提高内存限制!”
  • “编辑您的apache配置,并将每个孩子的最大请求数设置为较低的数字!”

显然,这些都会对性能和稳定性产生负面影响。我怎样才能真正分析并解决问题,而不是对其进行创可贴?

Apache将错误记录为:

  

PHP致命错误:允许的内存大小   X字节耗尽(试图   在第Z行的foo.php中分配Y字节)

1 个答案:

答案 0 :(得分:2)

我问了一个关于PHP内存管理的类似问题:Diagnosing Memory Leaks - Allowed memory size of # bytes exhausted

我很确定从exec()或proc_open()运行外部程序不会计入php的内存限制。

跟踪PHP中的内存使用情况显然非常困难。似乎没有办法查找符号表或类似的东西。

PHP有一些内存管理功能,如memory_get_usage()memory_get_peak_usage(),可以获取脚本中任何给定点使用的内存总量。您可以编写自己的跟踪脚本,并将其放置在关键点以便查找内存hogger。

根据您的代码堆栈的大小,xdebug的execution trace可能是您最好的选择。但是如果你有很多代码,那就太过分了。