【问题标题】:Apache process idling and eating memoryApache进程空闲和吃内存
【发布时间】:2015-01-03 15:44:24
【问题描述】:

我一直在尝试调试内存大小不断增长的 Apache 进程。我在具有 4GB RAM 的虚拟 Ubuntu 主机上运行带有 MPM Prefork 的 Apache 2.4.6,为带有 mod_wsgi 的 Django 应用程序提供服务。该应用程序有大量的 AJAX 调用,Apache 每分钟收到 300-1000 个请求。这是我所看到的:

  • 一旦我重新启动 Apache,第一个子进程(PID 最低)将继续增加其内存使用量,在 6 或 7 分钟内达到一个 gig。所有其他 Apache 进程将保持每个进程的内存使用量在 10MB-50MB 之间。
  • 麻烦的进程的 CPU 使用率会波动,有时会下降到非常低的水平,有时会徘徊在 20% 或有时会飙升。
  • 麻烦的进程将无限期运行,直到我重新启动 Apache。
  • 我可以在我的 Django 日志中看到麻烦的过程是为多个远程 IP 提供一些请求(我看到报告主要是针对我的应用不喜欢的 URL 捕获异常)。
  • Apache 错误日志经常(但不总是)显示 PID 的“IOError: failed to write data”,有时跨多个 IP。
  • Apache 访问日志显示与此 PID 关联的任何已完成请求。
  • 在 PID 上运行 strace 除了 'restart_syscall(<... resuming interrupted call ...>' 之外没有任何结果,即使我可以在 strace 运行时看到我的应用程序日志中提到的 PID。李>

我尝试将 MaxRequestsPerChild 和 MaxMemFree 设置得较低,但似乎都没有任何效果。

这可能是什么,或者我该如何进一步调试?我看不到 strace 的输出这一事实使我认为我的应用程序有一个无限循环。如果是这种情况,我该如何将 PID 追溯到它执行的代码路径或引发问题的请求?

【问题讨论】:

    标签: python django apache memory


    【解决方案1】:

    停止并启动 Apache,而不是重新启动 Apache。 Apache 存在一个已知的无法修复的内存泄漏问题。

    另外,请考虑使用 nginx 和 gunicorn - 此设置是一种轻量级、更快且经常被推荐的替代方案,可替代为您的 django 应用和静态文件提供服务。

    参考资料:

    Performance

    Memory Usage

    Apache/Nginx Comparison

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 2013-12-29
      • 2019-11-12
      • 1970-01-01
      相关资源
      最近更新 更多