Назад | Перейти на главную страницу

Apache Django OOM на сервере с 4 ГБ ОЗУ

Я запускаю производственный сайт Django на Ubuntu Linode с 4 ГБ оперативной памяти. Основные процессы: Apache2, MongoDB, Memcache, PostgreSQL, Tomcat6 и Redis. OOM Apache примерно 10 раз в день. Я много раз настраивал значения в apache2.conf и не видел никакого эффекта. Нет очевидной корреляции между количеством запросов и всплесками памяти или путём запросов и всплесками памяти. Я говорю «всплески», потому что обычно Apache потребляет очень мало памяти, а затем внезапно за одну секунду он перескакивает до 3,5 ГБ и убивается ядром. Мне не удалось искусственно вызвать всплески с помощью JMeter (программное обеспечение для нагрузочного тестирования), обычно потребление памяти под нагрузкой довольно низкое и стабильное.

24-часовой график использования памяти (от Linode Longview): http://i.imgur.com/ysIYe8l.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: Какие шаги я еще не сделал, чтобы диагностировать истинную причину?

У вас запущены приложения django? Это один из тех.

Не зная именно как вы это настроили Я держу пари, что вы настроили его так, чтобы среда выполнения python / django делила пространство памяти с Apache. Здесь объединяется использование памяти.