Ative o HugePages no Linux para vários serviços / processos

3

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

    
por ColOfAbRiX 29.04.2015 / 13:22

1 resposta

1

Você não menciona sua versão do kernel / distro, mas pode ser interessante notar que os kernels recentes (2.6.38+) possuem um recurso chamado páginas de acesso transparentes.

Você pode saber se está ativado usando:

cat /sys/kernel/mm/transparent_hugepage/enabled

É praticamente todo esse fardo administrando e pré-alocando suas páginas.

Você pode ver quanta memória é alocada usando o tamanho da página executando

cat /proc/meminfo | grep AnonHugePages

ou

egrep 'trans|thp' /proc/vmstat

por uso do processo

grep -e AnonHugePages  /proc/*/smaps | awk  '{ if($2>4) print $0} ' |  awk -F "/"  '{print $0; system("ps -fp " $3)} '

Últimos três comandos retirados do suporte do RHEL6

Interessantes informações em Transparent HugePages e JVM.

    
por 29.04.2015 / 18:36