【问题标题】:Httpd Process High memory usage and slow page loadsHttpd 进程高内存使用和缓慢的页面加载
【发布时间】:2010-05-05 13:13:23
【问题描述】:

我在我的 windows vista 机器上运行 wampserver。我已经这样做了很长时间,而且效果很好。我已经用这个设置完成了很多项目。

但是,今天,我没有更改任何内容(没有配置等),只更改 PHP 代码,我发现每次加载我网站的页面(具有用户会话或访问数据库的页面)时加载速度非常慢 - 超过 30秒,他们过去需要 1 或 2 秒。

当我查看任务管理器时,我可以在页面加载时看到 httpd 进程从 10mb 跳转到 30mb、90mb、120mb、250mb,然后再次下降。

我已经测试过以前的 php 代码项目,它们似乎也都很慢!

发生了什么事?

感谢大家对这个混乱问题的任何帮助!

【问题讨论】:

  • memory_limit 的 ini 设置是什么?它不应该超过 32M,这样可以防止在您的 PHP 代码中发生这种情况。
  • 这并不能完全解决问题?将会发生的只是 PHP 将给出一个内存无法分配的致命错误。我仍然有导致这个问题的问题!
  • 您的数据库访问库是否已更新(我假设您的会话也存储在这里)?您是否更改了任何配置以缓存在数据库中?您是否在 httpd 配置中添加了压缩或任何其他项目?
  • 您的数据库查询可能会返回大量数据。您应该检查一下是否是这种情况。
  • 限制 PHP 内存会告诉你很多关于内存泄漏发生在哪里以及如何修复它的信息。如果不进行大量调查,您不可能获得灵丹妙药的解决方案——只有你能做到——我们只能建议如何推进你的调查。

标签: php apache memory wampserver


【解决方案1】:

检查以下内容:

  • 检查您用于访问数据库的数据访问库最近是否已更改/更新(如果您使用的话)。
  • 只是猜测,但自上次检查之前的项目以来,您是否更改了防病毒/防火墙(或设置)?更激进的安全性可以大大减慢速度。
  • 您是否更改了 WAMPSERVER 菜单中的 Apache/PHP/MySQL 版本?
  • 也许您可以尝试重新安装 WAMPSERVER(最后再安装,如果这对您不麻烦,因为我真的怀疑这会有所帮助,但在某些非常奇怪的情况下它可以)。

但是根据您在问题中解释的经验和内存使用情况,似乎您的 SQL 查询执行时间很长和/或返回一个非常大的数据集。

尝试优化您的查询,它可以帮助提高速度,但不能真正使用内存(至少在结果集相同的情况下)。对于内存,也许您可​​以使用LIMIT 来减少返回的数据集(如果您的设计允许 - 但应该这样做)。

由于我们并不真正知道您对数据做了什么,因此请注意,“玩”(如解析大型 XML 文档)与大型数据集相比可能会花费大量时间/内存(同样,这在很大程度上取决于您如何处理所有这些数据)。

最重要的是,如果这篇文章中没有任何帮助,请尝试发布有关您的设置的更多信息,以及当它运行缓慢时您的具体操作(甚至是代码示例)。

【讨论】:

    【解决方案2】:

    尝试检查 wamp 日志文件的大小。

    C:\wamp\logs
    

    有时,当它们变得非常大时,它们会导致 Apache 变慢。

    【讨论】:

      【解决方案3】:

      您最近是否更改了网络配置或升级了系统?这可能是通过您的网络配置或防病毒/安全软件引起的。例如,人们过去曾遇到过导致此问题的 zonealarm 问题。

      此外,如果您最近从键入“127.0.0.1”切换到“localhost”或在网络中移动,您可能会受益于从 C:\Windows\System32\drivers\etc\hosts 中删除 IPV6 localhost 设置,如果你有一个:

      换行

      ::1             localhost
      

      # ::1             localhost
      

      【讨论】:

        【解决方案4】:

        我很惊讶没有人提出这个建议。你应该总是试着看看为什么事情真的变慢了:

        首先使用性能监视器查看瓶颈在哪里。 (perfmon.exe) 硬页错误实际上是瓶颈吗?您的硬盘驱动器是否忙于读取/写入页面文件?检查硬盘IO队列的长度。 CPU 忙吗?

        如果没有任何东西看起来很忙,请使用procmon 查看您的 php 进程是否在某些系统调用上被阻塞。

        希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          虽然与查找数据库瓶颈无关,XDebug 与 cachegrind 查看器(例如 WebGrindWinCacheGrind)结合使用可以帮助您找到 PHP 代码中执行时间最长的部分。

          【讨论】:

          • +1 如果每个人都有这些已安装的问题,就不会存在这样的问题
          猜你喜欢
          • 2015-03-15
          • 2012-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-22
          • 2019-01-07
          • 1970-01-01
          相关资源
          最近更新 更多