Em uma das minhas máquinas Debian, estou executando um serviço em uma JVM e uma instância do MySQL. Eu habilitei o HugePages seguindo vários guias online, mas estou tendo um problema.
Aqui está minha configuração:
vm.nr_hugepages = 2816
vm.nr_overcommit_hugepages = 128
vm.hugetlb_shm_group = 1002
kernel.shmmax = 5905580032
kernel.shmall = 1441792
ATUALIZAÇÃO: Minha máquina é uma VM convidada no topo do VMWare ESX, com 2 CPUs atribuídas e 6 GB de RAM. Eu reservei 512MB ou RAM para o sistema e o restante (5.5GB, 5905580032bytes como visto em kernel.shmmax
) foi atribuído 3GB para a JVM e 2.5GB para o MySQL. Por isso eu reservei 5.5GB / 2MB = 2816 número de páginas enormes
O acesso à memória é permitido para o grupo "services" (gid = 1002). O MySQL e a JVM são executados com diferentes usuários que são membros desse grupo "services", como grupo primário:
uid=106(mysql) gid=1002(services) groups=1002(services),111(mysql)
uid=1001(java) gid=1002(services) groups=1002(services),1003(java)
O HugePages está ativado e funciona. O problema é que apenas um aplicativo no momento parece ser capaz de usá-los! Se eu iniciar o mysql pela primeira vez, o jvm não poderá usá-lo e vice-versa.
service mysql start -> OK
service java start -> Fallback to normal memory
ou
# service java start -> OK
# service mysql start -> Failure, can't allocate memory
Como posso fazer isso? Estou enganado em algum lugar? Pode até ser feito?
Não há requisitos para criar uma máquina separada para Java e para o MySQL, portanto, estou empenhado em manter os dois serviços na mesma máquina.
UPDATE: No momento, estou fazendo alguns perfis de memória para decidir se seria melhor alocar o HugePages para a JVM ou para o MySQL. Ou há uma resposta rápida para isso?
Obrigado