Jul 05 2012

EC2-Micro «Out of memory: kill process»

Category: Amazon Web Services,Apache,Server softwareingvar @ 12:00

Вот такое забавное сообщение «Out of memory: kill process» довелось наблюдать на EC2 Micro Instance Amazon. В какие-то моменты инстанс начал умирать, по логам удалось увидеть информацию:

kernel: [151388.450555] Free swap  = 0kB
kernel: [151388.450557] Total swap = 1212964kB
...
kernel: [151388.453545] Out of memory: kill process 22450 (apache2) score 111071 or a child
kernel: [151388.453561] Killed process 2182 (apache2) vsz:318016kB, anon-rss:352kB, file-rss:0kB

Конфигурация Micro Instance:
— 613 MB memory
— Up to 2 EC2 Compute Units (for short periodic bursts)
— EBS storage only
— 32-bit or 64-bit platform
— I/O Performance: Low
— API name: t1.micro
— Swap был сконфигурирован на 1.2 GB

На сервере была установлена Ubuntu и настроен LAMP. Особой нагрузки на сервере не наблюдалось. Сценарий происходящего на сервере был следующий — вначале заканчивалась оперативная память, потом заканчивалась память в swap и сервер умирал :). Причиной этому был Apache, который был настроен в режиме Prefork. Для решения этой проблемы был переконфигурирован Apache Prefork, но и это не спасло ситуацию. Я установил nginx, вроде ситуация улучшилась, но все равно проблема повторялась. Увеличивая размер Swap мы не решили бы проблему, т.к. утечка памяти в любом случае продолжалась бы.

Интересное решение данной проблемы я нашел на официальном сайте Amazon:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html#MemoryOOM

Do one of the following:
— Stop the instance, and modify the instance to use a different instance type, and start the instance again. For example, you may want to use a larger instance type or a high-memory instance type.
— Reboot the instance to return it to a non-impaired status. The problem will probably occur again unless you change the instance type.

Как будто Amazon намекает «есть проблемы — берите более мощный instance». Ну-ну, но мы же не ищем легких путей :).

Для решения этой проблемы я решил использовать Monit, про который я напишу в ближайшее время. Решение не самое идеальное, но по крайней мере сервер самостоятельно восстанавливается и это лучше, чем пока Amazon пришлет письмо, что нужно опять перезапускать полностью сервер.

Дополнительный материал:
EC2 Micro Instance Limitations
Adding Swap to any EC2 Instance
Quick and Easy Way to Monitor Process Memory Usage
Shell Script To Auto Restart Apache HTTPD When it Goes Down / Dead
Shell Script To Auto Restart Apache HTTPD

Tags: , , , ,

One Response to “EC2-Micro «Out of memory: kill process»”

  1. Артём Курапов says:

    Очень в тему, я уже перевёл базу в RDS, но она дорогущая зараза, а с горизонтальным масштабированием апачей ещё не разбирался — там надо под конкретный проект скорей всего подкручивать, а у меня тоже только мелкие сайты.

    «ps aux» говорит что процесс ест по 2-3% оперативки, надо будет тоже переезжать

Leave a Reply