Hugepages no linux - como ter certeza de que o processo java vai começar a usar o hugepages

3

Estou executando o servidor java na versão 5.9 do Red Hat Enterprise Linux Server. Recentemente eu comecei a usar o HugePages, pois ele tem algumas vantagens que eu gostaria de usar. O sistema foi configurado corretamente (como muitos sites e estados de blogs) e 40G de RAM foram configurados para uso nas páginas maiores.

HugePages_Total: 20480

HugePages_Free: 20480

HugePages_Rsvd: 0

Hugepagesize: 2048 kB

RAM total no servidor: 128G. Depois de configurar o hugePages, a máquina foi reinicializada e o processo do servidor foi iniciado em hugePages com tamanho de heap de 29G. Tudo correu bem. Ultimamente eu fiz algumas mudanças nos parâmetros do jvm e aumentei o tamanho do heap para 30G. Quando o processo jvm foi reiniciado, ele não utilizou as hugepages. Erro no log exibido:

Aviso de VM do servidor Java HotSpot (TM): falha ao reservar memória compartilhada (errno = 22)

Eu fiz alguns testes para ter certeza de que outras alterações nos parâmetros do java não causaram isso e a conclusão foi que o aumento do tamanho do heap foi o motivo.

Agora eu não entendi. O sistema não mostra nenhuma página enorme usada, então restam 40G de espaço e ainda assim o java não pode reservar 30G dela.

Alguém pode explicar por que isso está acontecendo?

Mais importante é a maneira de garantir que isso não aconteça no futuro?

Este é o sistema de produção, portanto, se eu criar a configuração final, ele não poderá executar o processo java fora do hugePages, pois não haverá mais espaço. A configuração final será de 96G de enormes páginas com um processo Java de 32GB funcionando constantemente e com recursos de reserva para executar mais dois processos em caso de emergência. Eu tenho que ter certeza que quando tal emergência acontecer, os processos Java poderão usar o enormePáginas.

Qualquer ajuda seria ótima.

    
por user2722116 27.08.2013 / 18:00

2 respostas

1

Acredito que você precisa ativar explicitamente o uso de páginas de acesso na JVM com -XX:+UseLargePages , consulte este artigo em Ajustando o grande heap java e as grandes páginas do Linux .

Você pode querer verificar os outros comutadores JVM relacionados.

    
por 14.01.2014 / 11:51
0

Além disso, você deve verificar o parâmetro 'memlock' em /etc/security/limits.conf. Se esse parâmetro não estiver configurado para um valor alto o suficiente, para o usuário que está executando a JVM, esse usuário não poderá alocar as páginas de entrada, mesmo se houver bastante configurado. (Certifique-se de que o memlock esteja configurado para pelo menos 30 GB, se é isso que você está tentando alocar.)

    
por 11.02.2014 / 18:55