我在 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 共享内存空间。此处的内存使用被合并了。