【问题标题】:Debugging memory usage in mod_php在 mod_php 中调试内存使用情况
【发布时间】:2009-10-21 22:34:12
【问题描述】:

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

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

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

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

显然,其中任何一个都会对性能和稳定性产生负面影响。我怎样才能真正分析和解决问题,而不是创可贴?

Apache 将错误记录为:

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

【问题讨论】:

    标签: php apache memory


    【解决方案1】:

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

    我相当确定从 exec() 或 proc_open() 运行外部程序不会占用 php 的内存限制。

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

    PHP 有几个内存管理函数,例如memory_get_usage()memory_get_peak_usage(),它们可以获取脚本中任何给定点使用的内存总量。您可以编写自己的跟踪脚本,并将其临时放置在关键点以查找内存占用者。

    根据您的代码堆栈有多大,xdebug 的execution trace 可能是您最好的选择。但是如果你有很多代码,这可能会有点过分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2011-03-27
      • 2017-05-01
      • 2012-03-15
      相关资源
      最近更新 更多