Acredito que você precisa ativar explicitamente o uso de páginas de acesso na JVM com -XX:+UseLargePages
, consulte este artigo em
Você pode querer verificar os outros comutadores JVM relacionados.
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.
Acredito que você precisa ativar explicitamente o uso de páginas de acesso na JVM com -XX:+UseLargePages
, consulte este artigo em
Você pode querer verificar os outros comutadores JVM relacionados.
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.)
Tags java linux rhel shared-memory