Виртуальная машина Ubuntu 7.04 не хватает памяти

Я поддерживаю виртуальную машину Ubuntu 7.04 на Linode.com для размещения нескольких веб-сайтов, списков адресов электронной почты и т. Д. Она долгое время работала без нареканий. Я не исправляю это или действительно обращаю на это внимание.

В последнее время (последние несколько месяцев) и с возрастающей частотой в коробке заканчивается память, и мне приходится ее перезагружать. Он сконфигурирован с реальной памятью 350 МБ плюс 64 МБ подкачки. Это работает Apache, Mysql, Postfix и почтальон.

Симптомы нехватки памяти очевидны, и я вижу их в kernel.log:

Jul 21 10:16:42 grendel kernel: Out of memory: kill process 30364 (apache2) score 11205 or a child
Jul 21 10:16:42 grendel kernel: Killed process 30364 (apache2)
Jul 21 10:16:42 grendel kernel: apache2 invoked oom-killer: gfp_mask=0xa01d2, order=0, oomkilladj=0

Есть ли метод серебряной пули, чтобы определить, что здесь происходит? Я наблюдаю за "вершиной", и хотя я вижу, как со временем уменьшается реальная память, я не вижу явного виновника.

4 ответа

Возможно, сконфигурируйте задание cron для отправки по почте чего-нибудь ps auxh | sort -r --key=4 | head -5 Вам каждые 30 минут или около того?

Это позволит вам узнать 5 главных потребителей памяти, что может помочь отследить преступный процесс. The 4th column is the percentage of memory consumed by the process.

You might be able to spot a trend over time.

Вверху попробуйте команды F o, чтобы отсортировать по виртуальному (общему) размеру изображения. Тогда вы увидите самые большие процессы наверху.

Вы также можете удалить требование перезагрузки, установив swapd, который автоматически создаст файлы подкачки в случае нехватки памяти.

Если процессы Apache становятся большими, например, если вы запускаете PHP-скрипты через mod_php, которые время от времени работают с достаточным количеством данных, вы можете не заметить, что какой-то один процесс массово растет (но каждый процесс Apache немного растет со временем). Если это так, то вы можете попробовать следующее:

  • ограничьте число дочерних процессов, используемых Apache, путем настройки параметров:
    • StartServers
    • MinSpareServers
    • MaxSpareServers
    • MaxClients
  • рассмотрите возможность использования mpm_worker вместо mpm_perfork, если все, что вы делаете с Apache, является поточно-ориентированным
  • убедитесь, что KeepAliveTimeout не слишком высокий (это останавливает ошибочного клиента, который слишком долго удерживает процессы, особенно это важно, если вы резко ограничили число детей
  • Уменьшение максимального времени жизни каждого процесса с помощью параметра MaxRequestsPerChild поможет, если проблема связана с утечкой памяти, хотя может сделать вашу службу заметно менее эффективной, если вы подключите ее слишком далеко.
Другие вопросы по тегам