Openvz - Unable to fork: Cannot allocate memory
Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2024
Openvz - Unable to fork: Cannot allocate memory
# vzctl enter 17553 entered into CT 17553 -bash: fork: Cannot allocate memory
# cat /proc/user_beancounters | more Version: 2.5 uid resource held maxheld barrier limit failcnt 17553: kmemsize 23031949 26468352 52145203 57359723 0 lockedpages 0 0 2546 2546 0 privvmpages 375806 383842 1048576 2097152 1 shmpages 8131 8803 32530 32530 0 dummy 0 0 9223372036854775807 9223372036854775807 0 numproc 64 93 300 300 0 physpages 134024 140323 0 524288 77 vmguarpages 0 0 524288 524288 0 oomguarpages 121028 121425 524288 524288 47 numtcpsock 20 59 99999 99999 0 numflock 28 69 1000 1100 0 numpty 1 1 127 127 0 numsiginfo 0 27 1024 1024 0 tcpsndbuf 453440 3450280 409595904 409595904 0 tcprcvbuf 327680 966656 409595904 409595904 0 othersockbuf 32368 2132096 6085811 11295923 0 dgramrcvbuf 0 8720 6085811 6085811 0 numothersock 56 94 99999 99999 0 dcachesize 6562886 11722725 11381312 11722752 0 numfile 710 1135 99999 99999 0 dummy 0 0 9223372036854775807 9223372036854775807 0 dummy 0 0 9223372036854775807 9223372036854775807 0 dummy 0 0 9223372036854775807 9223372036854775807 0 numiptent 20 20 512 512 0
Увеличиваем лимит выделения памяти, в страницах памяти
# vi /etc/vz/conf/17553.conf PRIVVMPAGES="1048576:2097152" PRIVVMPAGES="1048576:unlimited" # vzctl restart 17553
Описание параметров:
numproc - Максимальное количество процессов. При превышении, ядро будет отказывать в создании нового процесса. kmemsize - Размер неподкачиваемой памяти, выделяемой ядром операционной системы. vmguarpages - Количество страниц памяти, которые Вам гарантированы для выделения. Смотрите пояснение ниже о том, что такое страницы памяти. Это лимит, который Вам будет доступен всегда. Или почти всегда, смотрите oomguarpages. oomguarpages - Гарантированное количество памяти, выделяемое в случае, если память "перегружена" (гарантия от уничтожения при нехватке памяти). Измеряется в страницах памяти, смотрите ниже. В случае, когда ядро сталкивается с ситуацией, когда VPS`ами запрашивается больше памяти, чем имеется физически, то происходит ошибка out of memory. Данный параметр показывает, сколько гарантированно будет выделено страниц памяти для VPS в этом случае. privvmpages - Лимит выделения памяти, в страницах памяти, смотрите ниже. Ядро никогда не выделит памяти больше, чем доступно по этому параметру. Также, если параметр vmguarpages меньше чем privvmpages, то это значит, что Вам может быть доступно одно количество страниц памяти, но гарантированны только часть из них, и ядро может выделять или не выделять их по своему усмотрению согласно текущей нагрузке на сервер. Это включает как Ram так и Swap память. physpages - Показывается только через /proc/user_beancounters, так как это не лимит. Данный параметр показывает реально используемое в данный момент времени количество страниц памяти. numfile - Максимальное количество одновременно открытых файлов. numiptent - Число записей NETFILTER (фильтрация IP пакетов). Если Вы планируете использовать iptables, то это должно быть достаточно большое число. Например, firewall APF по умолчанию требует минимум 256, а для нормальной работы не менее 512. Прим. Множество параметров указано в страницах памяти, перевести это число в обычные Мб достаточно просто по этой формуле: x * 4 / 1024 , где x - это количество страниц памяти.
нормальные настройки для контейнера:
KMEMSIZE="unlimited" LOCKEDPAGES="unlimited" PRIVVMPAGES="unlimited" SHMPAGES="unlimited" NUMPROC="unlimited" PHYSPAGES="0:196608" VMGUARPAGES="unlimited" OOMGUARPAGES="unlimited" NUMTCPSOCK="unlimited" NUMFLOCK="unlimited" NUMPTY="unlimited" NUMSIGINFO="unlimited" TCPSNDBUF="unlimited" TCPRCVBUF="unlimited" OTHERSOCKBUF="unlimited" DGRAMRCVBUF="unlimited" NUMOTHERSOCK="unlimited" DCACHESIZE="unlimited" NUMFILE="unlimited" AVNUMPROC="unlimited" NUMIPTENT="unlimited"