Я запускаю производственный сайт 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. Здесь объединяется использование памяти.