python - Apache 进程空闲并占用内存

标签 python django apache memory

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

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

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

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

最佳答案

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

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

引用资料:

Performance

Memory Usage

Apache/Nginx Comparison

关于python - Apache 进程空闲并占用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26791266/

相关文章:

Python optparse、默认值和显式选项

python - 每个键具有多个值的字典列表作为数据框

python - 在运行时在 wxPython 中添加复选框

django - 如何正确获取 Django url?

iphone - 如何将 XML POST 数据从 iOS 应用程序发送到 Django 应用程序?

apache - 使用 .htaccess 更改文件名

linux - Apache 2.4、Fedora 22 上的 Symfony2 权限问题 : 500 response on app. php、app_dev.php、config.php

linux - 如何修复此虚拟主机设置?

python - Django:管理界面中的 OneToOne 下拉菜单和独特的关联

python - 使用枚举时禁用 pylint 警告 E1101