Назад | Перейти на главную страницу

Linux не хватает памяти на VPS

На моем VPS (CentOS) 4 ГБ оперативной памяти (2 + 2 динамически назначаются при необходимости), и у меня Tomcat работает со следующими параметрами: JAVA_OPTS = "- Xms256m -Xmx2048m -XX: MaxPermSize = 256m".

Теперь, когда я пытаюсь запустить другое приложение на основе Java (например, сервер Hudson), я получаю следующую ошибку:

 There is insufficient memory for the Java Runtime Environment to continue.
 Native memory allocation (malloc) failed to allocate 664080 bytes for Chunk::new
 An error report file with more information is saved as:
 /server/hs_err_pid26476.log

Кажется, что система не может выделить 650 КБ памяти, но должно быть около 1,2 ГБ свободной.

free -m 
             total       used       free     shared    buffers     cached
Mem:          4096       2816       1279          0          0          0
-/+ buffers/cache:       2816       1279
Swap:            0          0          0

Я где-то обнаружил, что мне также следует проверить / proc / user_beancounters, который показывает failcnt на privvmpages. Понятия не имею, что это значит (провайдер дает 4 ГБ памяти, как положено? Или он обманывает?)

# cat /proc/user_beancounters
Version: 2.5
       uid  resource                     held              maxheld              barrier                limit              failcnt
 70692271:  kmemsize                 15371949             15388993             41943040             46137344                    0
            lockedpages                     0                    0                 1024                 1024                    0
            privvmpages                720030               720189              1048576              1048576                 9604
            shmpages                     9001                 9001                65536                65536                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            numproc                       109                  109                  256                  256                    0
            physpages                  173670               173780  9223372036854775807  9223372036854775807                    0
            vmguarpages                     0                    0               262144               262144                    0
            oomguarpages               174598               174708  9223372036854775807               262144                    0
            numtcpsock                     30                   30                 1440                 1440                    0
            numflock                       14                   14                  752                  826                    0
            numpty                          1                    1                   64                   64                    0
            numsiginfo                      0                    0                 1024                 1024                    0
            tcpsndbuf                  601840               601840              6881280             10813440                    0
            tcprcvbuf                  491520               491520              6881280             10813440                    0
            othersockbuf               174600               174600              4504320              8388608                    0
            dgramrcvbuf                     0                    0              1048576              1153432                    0
            numothersock                  117                  118                 1440                 1440                    0
            dcachesize                      0                    0              7340032              8074035                    0
            numfile                      3516                 3516                16384                16384                    0
            dummy                           0                    0                    0                    0                    0
            dummy                           0                    0                    0                    0                    0
            dummy                           0                    0                    0                    0                    0
            numiptent                      18                   18                  400                  405                    0

Провайдеры OpenVZ обычно продают объем оперативной памяти своих виртуальных машин как два числа: «гарантированная» и «пакетная». Предполагается, что вы всегда получаете «гарантированный» объем ОЗУ и можете использовать до «пакетного» объема, если позволяют ресурсы хоста. Например, VPS может продаваться как «512 МБ гарантированно 1 ГБ пакетной оперативной памяти».

У вас всегда должно быть успешное выделение памяти ниже "гарантированного" объема, но при выделении памяти иногда может произойти сбой при превышении этого количества, если другие виртуальные машины на хосте также потребляют оперативную память или если поставщик превысил подписку на машину (почти всегда) .

Чтобы узнать, что это за числа, посмотрите на barrier для vmguarpages что представляет собой "гарантированную" оперативную память, а limit для privvmpages что представляет собой «пакетную» RAM. Каждое из этих чисел выражается в количестве страниц по 4 КиБ.

Итак, в вашем случае мы видим, что у вас есть 1 ГБ (262144) «гарантированной» ОЗУ и 4 ГБ (1048576) «пакетной» ОЗУ. (Если это не те числа, которые вам обещали, вам нужно очень неприятно поговорить с вашим провайдером VPS.)

Поскольку в виртуальной машине уже используется более 2 ГБ, выделение памяти может не выполняться, поскольку оно превышает «гарантированный» объем.

Ваш провайдер, скорее всего, гарантирует только 2 ГБ памяти и еще два, если они доступны, то есть, если другим клиентам в настоящее время требуется меньше (что бывает редко). Следовательно, было бы лучше принять максимум 2, а не 4 ГБ.

Счетчик сбоев на privvmpages показывает, как часто вашей системе не удавалось выделить часть памяти (грубо говоря).