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

Как я могу увеличить память, выделенную процессу в Ubuntu server

Я пытаюсь настроить параллельный сервер обмена сообщениями, и он, похоже, использует много памяти. В настоящее время наша серверная ОС Ubuntu и серверное программное обеспечение написано на Java. Под нагрузкой мы получаем из памяти исключение, но только 70% моей 8 ГБ оперативной памяти используется.

как выделить больше памяти для процесса Java?

5
задан Sathya
источник

2 ответов

насколько я могу судить, есть четыре возможности:

  1. Ubuntu не ограничивает память для каждого процесса по умолчанию, но есть способы установить эти ограничения. Самый простой способ узнать, что было сделано (если что) будут консультации с человеком, который администрирует сервер.

  2. Если вы находитесь на VPS, а не на реальном сервере, может возникнуть проблема с конфигурацией виртуальной машины.

  3. Я не знаю именно так работает Java, но C ограничивает память, доступную стеку при компиляции. В этом случае можно указать компилятору увеличить размер стека или переместить в кучу большие массивы.

  4. Если ваша ОС 32-разрядная, объем доступной памяти для каждого процесса жестко ограничен (где-то между 2 ГБ и 4 ГБ). Если ваш сервер имеет 64-разрядный процессор, это можно легко исправить, установив 64-разрядную ОС.

возможность 4 довольно легко править из. Чтобы проверить, является ли это 1, 2 или 3, Вы можете скомпилировать следующее с gcc (или написать эквивалент в Java):

#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
    long bytes = atol(argv[1]), counter, *pointer, words = bytes / sizeof(long);

    // try to allocate memory

    if ((pointer = malloc(bytes)) == NULL)
    {
        puts("Could not allocate memory");
        exit(1);
    }

    // play with memory, so compiler won't optimize allocation out

    for(counter = 0; counter < words; counter++)
        pointer[counter] = counter;

    exit(0);
}

и выполнить его объем памяти, который вы хотите выделить в качестве опции командной строки.

вы должны иметь возможность выделить всю память, которая сообщается как свободная или кэшированная. Если вы можете, вы исключаете возможность 1 и возможно 2.

3
отвечен Dennis 2012-12-30 07:44:25
источник

самая большая память, используемая процессами java, - это куча, в которой хранится большинство объектов java. По умолчанию он ограничен 1 ГБ или частью имеющейся памяти. Когда вы находитесь вне пространства кучи, вы получили Java из исключения памяти. Можно увеличить (или уменьшить) размер кучи для виртуальной машины Java с помощью параметра-Xmx. например:

java -Xmx=2048m ...

Если вы используете 32-битную JVM, вы не можете надежно установить его больше, чем ~2,5-3 ГБ. Необходимо переключиться на 64-разрядную JVM, чтобы избежать это ограничение.

0
отвечен jlliagre 2012-12-30 09:38:52
источник

Другие вопросы java memory out-of-memory ubuntu