@zvzz

Ubuntu 12.04 / LAMP / out of memory / can not fork?

Добрый день.

Есть виртуалка на сабже, которая иногда дает ошибку "Out of memory" то в php , то в mysql, то просто в шелле не запускает ничего с ошибкой "can not fork" / "out of memory". Немного подождать - и симптом проходит. Запустил лоад тест - некий % запросов действительно отваливался по 500 ошибке. Собрал тот же самый сетап начисто на другом (маленьком) дроплете, запустил такой же лоад тест - все чисто.

Из допсофта на виртуальном сервере есть только exim4. Гугление дает ответы за старые года, или нерелевантные, или не помогает. Выглядит все так, будто процессы ограничены в максимальной памяти per process, хотя общей занятой памяти - 340 Мб из 1.5Гб.

Был бы очень благодарен за направление поиска, какие конф файлы копнуть/запостить сюда. На всякий случай ниже вывод ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 255607
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 255607
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


заранее большое спасибо
  • Вопрос задан
  • 2800 просмотров
Решения вопроса 1
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.

У вас openvz с плохо настроенными лимитами на память. http://habrahabr.ru/post/53236/ вот здесь писали про нечто похожее (хотя и не совсем верно - там система управления памятью намного сложнее, чем просто ограничение виртуальной памяти). Смотрите в /proc/user_beancounters - там, скорее всего, заканчивается какой-нибудь kmemsize.

Выход - переезжать на KVM/Xen или искать хостера с нормально настроенными лимитами на память, например вот такими - http://hastebin.com/doyuhesosu (здесь лимиты выставлены через physpages и lockedpages, что тоже далеко от идеала с точки зрения гостевой ОС, но хотя бы даёт честный гигабайт памяти (после которого, впрочем, всё равно будет cannot fork).

Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@garreth

А у Вас система 32-разрядная или 64? Если 32, то это может быть Low memory starvation.

Ответ написан
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.

Напишу лучше отдельным ответом, ибо в обсуждении оно там в убитом формате получилось:

rsync -avzP --numeirc-ids / root@newserver:/chroot --exclude=/proc/* --exclude=/sys/* --exclude=/dev/*


В /etc/fstab:
# for chroot 
proc /chroot/proc proc rw,relatime 0 0 
sysfs /chroot/sys sysfs rw,relatime 0 0 
udev /chroot/dev devtmpfs rw,relatime,size=10240k,nr_inodes=4112034,mode=755 0 0 
devpts /chroot/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0


Ну и потом chroot /chroot и запускайте нужные демоны. Правда, придется самостоятельно заботиться об их старте после ребута (хотя бы даже /etc/rc.local). Как-то так. Можете в жаббер-почту постучать, подробнее расскажу.

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы