具有 4GB RAM 的服务器上的 Apache Django OOM

具有 4GB RAM 的服务器上的 Apache Django OOM

我在 Ubuntu Linode 上运行一个生产 Django 网站,内存为 4GB。主要进程是 Apache2、MongoDB、Memcache、PostgreSQL、Tomcat6 和 Redis。Apache OOM 每天大约 10 次。我多次调整了 apache2.conf 中的值,但没有看到任何效果。请求数量和内存峰值之间没有明显的关联,请求路径和内存峰值之间也没有明显的关联。我说“峰值”是因为 Apache 通常消耗的内存很少,然后突然在一秒钟内跳到 3.5GB 并被内核杀死。我无法使用 JMeter(负载测试软件)人为触发峰值,通常负载下的内存消耗相当低且稳定。

24 小时内存使用情况图表(来自 Linode Longview): https://i.stack.imgur.com/Heuax.png

看起来内存使用量也正在缓慢上升。

来自系统日志:

kernel: apache2 invoked oom-killer:
...
kernel: 11705 total pagecache pages
kernel: 5472 pages in swap cache
kernel: Swap cache stats: add 76719087, delete 76713615, find 92563708/94246314
kernel: Free swap  = 0kB
kernel: Total swap = 2097148kB
kernel: 1050623 pages RAM
kernel: 43278 pages reserved
kernel: 788996 pages shared
kernel: 999768 pages non-shared
...
kernel: [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
kernel: [ 3709]  1000  3709  3706586   889237    7117   464598             0 apache2
...
kernel: Killed process 3709 (apache2) total-vm:14826344kB

当前的apache2.conf:

Timeout 30
KeepAlive Off

<IfModule mpm_prefork_module>
    StartServers 3
    MinSpareServers 2
    MaxSpareServers 5
    MaxClients 10
    MaxRequestsPerChild 1000
</IfModule>

切换到 Nginx 不是一个选择。大多数情况下,OOM 不会杀死系统,但每隔几周就会发生一次,并且服务器需要重新启动。A:可能是什么原因造成的?B:我还没有采取哪些步骤来诊断真正的原因?

答案1

你正在运行 Django 应用吗?这是其中之一。

不知道确切地您是如何设置的 我敢打赌,您已经将其设置为 python/django 运行时与 Apache 共享内存空间。此处的内存使用被合并了。

相关内容