Como posso aumentar a memória alocada para um processo no servidor Ubuntu

Como posso aumentar a memória alocada para um processo no servidor Ubuntu

Estou tentando configurar um servidor de mensagens altamente simultâneo e parece usar muita memória. Atualmente nosso sistema operacional de servidor é Ubuntu e o software de servidor é escrito em Java. Sob carga, ficamos sem memória, mas apenas 70% dos meus 8 GB de RAM são usados.

Como posso alocar mais memória para meu processo Java?

Responder1

Pelo que posso dizer, existem quatro possibilidades:

  1. O Ubuntu não limita a memória por processo por padrão, mas existem maneiras de configurar esses limites. A maneira mais fácil de saber o que foi feito (se foi feito) seria consultar a pessoa que administra o servidor.

  2. Se você estiver em um VPS e não em um servidor real, pode haver um problema com a configuração da VM.

  3. Não sei exatamente como o Java funciona, mas C restringe a memória disponível para a pilha durante a compilação. Nesse caso, você pode instruir o compilador a aumentar o tamanho da pilha ou mover arrays maiores para o heap.

  4. Se o seu sistema operacional for de 32 bits, a memória disponível por processo será limitada (algo entre 2 GB e 4 GB). Se o seu servidor tiver uma CPU de 64 bits, isso pode ser facilmente corrigido instalando um sistema operacional de 64 bits.

A possibilidade 4 é muito fácil de descartar. Para verificar se é 1, 2 ou 3, você poderia compilar o seguinte com gcc (ou escrever o equivalente em 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);
}

e execute-o com a quantidade de memória que deseja alocar como opção de linha de comando.

Você deve ser capaz de alocar toda a memória relatada como livre ou em cache. Se puder, você descarta a possibilidade 1 e possivelmente 2.

Responder2

A maior memória usada pelos processos Java é o heap, onde a maioria dos objetos Java são armazenados. Por padrão, é limitado a 1 GB ou a uma fração da memória presente. Quando você está sem espaço de heap, você recebe uma exceção de falta de memória em Java. É possível aumentar (ou diminuir) o tamanho do heap para uma JVM usando a opção -Xmx. por exemplo:

java -Xmx=2048m ...

Se você estiver usando uma JVM de 32 bits, não poderá configurá-la com segurança para mais de aproximadamente 2,5 a 3 GB. Você precisa mudar para uma JVM de 64 bits para evitar essa limitação.

informação relacionada