Como fazer o JBoss usar “HugePages”

Na verdade o título deveria ser “Como fazer o Java usar HugePages“.

Primeiro quero esclarecer que eu já estou contando que você saiba o que é HugePages, o intuito aqui é mostrar só como fazer com o que o Java, mais especificamente utilizando o JBoss, utilize este recurso.

Primeiro você precisa configurar os usuários e grupo que vão poder utilizar o recurso, para isso existe um helper que vai te ajudar fazer isso, provavelmente só em RHEL5 e RHEL6 e derivados, nas outras distriuições você vai ter que fazer na mão.

O helper é o huge_page_setup_helper.py provido pelo pacote libhugetlbfs-utils, também em RHEL5 e 6 e derivados.

Executadndo o helper para alocar 4GB de memória para seja utilizado HugePages.

[root@hostjboss ~]# huge_page_setup_helper.py
Current configuration:
* Total System Memory……:   7872 MB
* Shared Mem Max Mapping…:      0 MB
* System Huge Page Size….:      2 MB
* Number of Huge Pages…..:   2048
* Total size of Huge Pages.:   4096 MB
* Remaining System Memory..:   3776 MB
* Huge Page User Group…..:  jboss (497)

How much memory would you like to allocate for huge pages? (input in MB, unless postfixed with GB): 4096 <- Inserir a quantidade de memória em MB que você quer alocar
Okay, we’ll try to allocate 4096 MB for huge pages…

What group should have access to the huge pages?(The group will be created, if need be) [hugepages]: jboss <- Insira o grupo que deverá poderá usar as HugePages, se não existir um grupo “hugepages” é sugerido, e se você não informar nenhum este grupo será utilizado.
Okay, we’ll give group jboss access to the huge pages
Group jboss (gid 497) already exists, we’ll use it

What user(s) should have access to the huge pages (space-delimited list, users created as needed)? jboss <- insira os usuários separados por virgula que poderão utilizar o recurso.
Adding user jboss to huge page group

Saved original /etc/sysctl.conf as /etc/sysctl.conf.backup
Saved original /etc/security/limits.d/hugepages.conf as /etc/security/limits.d/hugepages.conf.backup

Final configuration:
* Total System Memory……:   7872 MB
* Shared Mem Max Mapping…:   4096 MB
* System Huge Page Size….:      2 MB
* Available Huge Pages…..:   2048
* Total size of Huge Pages.:   4096 MB
* Remaining System Memory..:   3776 MB
* Huge Page User Group…..:  jboss (497)

Feito isso um arquivo “/etc/security/limits.d/hugepages.conf” será criado para que o usuário jboss possa usar o recurso de lock de endereçamento de memória.

O conteúdo do arquivo depois de executado o helper:

[root@hostjboss ~]# cat /etc/security/limits.d/hugepages.conf

# Huge page access configuration
jboss        soft    memlock        4194304
jboss        hard    memlock        4194304

Só por curiosidade, este valor é 4GB em KB (Kilobytes).

A outra parte da configuração diz respeito a shared memory (SHM), que é feito no /etc/sysctl.conf, como é mostrado  a seguir:

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296
kernel.shmmax = 4294967296
vm.nr_hugepages = 2048
vm.hugetlb_shm_group = 497

Rapidamente, os valores de shmall e shmmax são expressos em Bytes, e equivalem aos 4GB especificados no helper, o vm.nr_hugepages é a quantidade de páginas de memórias que serão alocadas para configura o recurso de HugePages, o tamanho da página de memória no RHEL6 é de 2048KB (2MB) que multipolicado por 2048 vai dar os 4GB especifidados, e por último o hugetlb_shm_group que é o grupo especificado para utilizar o recurso de HugePages.

Feito esta configuração os usuários do grupo jboss estarão aptos a utlizar as HugePages, entretanto é preciso que o software que você utilize saiba utilizar este recurso. o Java sabe!

E para fazer o Java utilizar este recurso, especificamente utilzando Jboss, dentro do arquivo run.conf adicione a seguinte opção no JAVA_OPTS:

-XX:+UseLargePages

Exemplo:

JAVA_OPTS=”-Xms1024m -Xmx1024m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.lang.ClassLoader.allowArraySyntax=true -XX:+UseLargePages

Pronto, agora é iniciar o Jboss.

E como eu sei que o recurso está sento utilizado? Simples, execute o seguinte comando:

cat /proc/meminfo | grep  Huge
HugePages_Total:    2048
HugePages_Free:      901
HugePages_Rsvd:      776
HugePages_Surp:        0
Hugepagesize:       2048 kB

Perceba esta informação:

HugePages_Free:      901

Isto quer dizer que das 2048 páginas que você alocou, ainda restam 901.

Done.

My first day on Canada.

Yeah, this is mys first day on Canada…. pois é mas não pensem que vou fazer um post em inglês por que eu vim aqui para apreder inglês hehe!!
Putz, saí de BSB dia 15 às 15:22….mofei em GRU até as 20:10, daí então parti para Toronto.
Quase 11 horas de viagem, cheguei quebrado em Toronto às 6 da matina… As contas não vão bater por causa do fuso, mas foi isso mesmo.
Como se não bastasse, mofei até 9:25 da manhã em Toronto, hora que embarquei para Vancouver, e adivinha?
Mais 5 horas de voo…
Bem, cheguei, um bagaço de pessoa mas cheguei.
A única coisa que eu sei é que tinha que ir para o endereço da minha homestay, então nem pensei duas veze e já cai pra dentro de um taxi.
Uauuuu… 15 minutinhos de primeiro mundo, Vancouver me deixou de queixo caído pela organização de tudo. Sem palavras.
CAD $26,00 (O taxista me levou CAD $30,00, mas eu que dei os 4 de gorjeta) do aeroporto até onde eu vou ficar pelo próximo mês.
Quem me recebeu na homestay foi um Mexicano de 20 anos de idade e que deve pesar +- 130 Kg hehehe, gente finíssima.
A mom e dady da homestay ainda não estavam aqui, o cara me ofereceu um rango (por sinal tinha pimenta pra cacete, não podia ser diferente vindo de um mexicano hehe) tentamo conversar, obviamente eu falando tudo errado e entendendo menos ainda, mas conseguimos nos comunicar bem. Isac é o nome dele.
Essa hora já eram por volta de 12:00 em Vancouver, então por volta de 13:00 fui dar uma cochilada e acordei as 22 hehehehehe, digo acordei as 17, tomei um banho, e dormi novamente até as 22, onde acordei e encontrei com a galera toda.
Minha mom e o marido dela são Filipinos, então comida filipina no jantar …. tirando a forma de fazer, e a forma com que misturam, o rango é bem parecido com o do Brasil.
Rangamo e batemo papo até agora… hora que estou escrevendo este post e vou dormir…
Bem, em resumo eu fiquei com um pouco de medo, mas já me sindo um pouco mais a vontade.
Amanhã, depois e o dia em que sobrar tempo eu escrevo mais contando mais detalhes… isso aqui foi só para não passar batido minha chegada :D

Monitorando o JBOSS com Zapcat e Zabbix

Estes dias eu postei nas redes sociais que havia terminado de implementar um monitoramento bem específico.

Se tratava de ter implementado o monitoramento de um JBOSS utilizando o Zabbix e a ferramenta Zapcat.

Então um colega, o André Deo, me perguntou quando eu escreveria sobre isso, a propósito esta é uma deficiência grave que tenho quando faço as coisas, não gostar de documentar, então eu disse a ele que faria um txt e enviaria pra ele, mas nem isso eu fiz :D .

Então eu resolvi hoje, nessa bela sexta-feira, fazer o tal documento e ensinar a você como se monitora o seu JBOSS com o Zabbix usando o Zapcat, mas não vou utilizar prints de tela, vou só ensinar mesmo como você deve proceder ok!? Fechado! Bora lá então…

Contando que você já tenha seu Zabbix instalado e configurado, bem como seu servidor Linux com JBOSS instalado e configurado, e pode até estar monitorando o servidor Linux onde está o JBOSS com o Zabbix, os passos a seguir já podem ser seguidos, mas antes vamos aos detalhes.

O Zapcat

O que é o Zapcat? O zapcat nada mais é que uma pacote java que é “deployado” no seu servidor JBOSS e que, além de uma interface Web onde você pode visualizar os Itens suportados para o monitoramento, lhe dará um agente Zabbix completinho funcionando dentro do seu JBOSS.

Este agente funciona em uma porta diferente do agente padrão  do Zabbix, funciona na porta 10052 ao invés da porta usual do agente zabbix que é a 10050.

Outro aspecto interessante é que os itens que você pode criar não não tem nada de diferente de um item padrão utilizando o agente Zabbix, exceto as chaves que serão utilizadas no item.

Mas além disso, o Zapcat, para adiantar sua vida difícil de Sysadmin, te da um template Java prontinho pra você usar com Itens, Triggers e Gráficos.

Então vamos a prática.

Baixe o Zapcat daqui http://sourceforge.net/projects/zapcat/, descompacte e localize o arquivo “zapcat-1.2.war” dentro da pasta descompactada.

Localize também a pasta template, e dentro dela localize o arquivo Template_Java.xml.

Pronto, meio caminho andado…Porra, mas ai você vai me falar, como assim meio caminho andado?  Pois é, é muito simples e já está quase tudo pronto.

Com os devidos arquivos localizados, vamos a implementação do monitoramento.

Primeiramente seu servidor Zabbix deverá ter acesso a porta 10052 do servidor que você quer monitorar.

Segundo, faça um backup do template java que já vem por padrão no Zabbix, modificando seu nome para qualquer coisa que você queira. Feito isso você vai importar o Template_Java.xml que falamos logo acima para o Zabbix, que por sua vez já criará para você um template para monitorar os Servidores JBOSS já com alguns Itens, Triggers e Gráficos.

Feito isso o próximo passo é fazer o deploy do arquivo “zapcat-1.2.war” no seu AS. Para isso você terá que simplesmente copiar o arquivo “.war” acima para dentro da diretório “${JBOSS_HOME}/server/default/deploy”. Não precisa nem reiniciar o JBOSS. Neste momento o Zapcat já estará instalado e o Zabbix configurado para monitorar o seu JBOSS AS.

Bom, agora você terá que adicionar o Servidor ao Zabbix.

Putz, ai você vai me falar: Carinha, eu já tenho este servidor cadastrado no Zabbix!!

E eu vou lhe dizer: Adiciona novamente mas mudando o nome do host, tipo adicionando a palavra “zapcat” na frente dele, e ao invés de usar a porta padrão pré configurada na adição do host, tu muda para a porta do zapcat, que é a 10052.

Beleza, já no ato da adição tu pode associar seu novo “host-zapcat” ao Template_Java que criamos agora a pouco.

Pronto, zapcat instalado e monitorando o JBOSS.

Para você ver os itens disponíveis para monitoramento você pode acessar a seguinte url:

http://ip.do.servidor.jboss:8080/zapcat-1.2/ <- interfacezinha web falando do zapcat.

http://ip.do.servidor.jboss:8080/zapcat-1.2/mbean.jsp <- Lista de intens e parametros que você pode monitorar no seu JBOSS AS. Ou simplesmente clique em “mbeam list” na interfacezinha que eu mostrei acima.

Obviamente teremos agora as restrições :D . Vamo então as observações sobre o Zapcat:

- Se o monitoramento não funcionar de cara você terá que acessar primeiro o jmx-console do AS para o Zapcat passar a funcionar. Eu não sei por que cargas d’agua isso acontece, mas se tu não acessar http://ip.do.seu.jboss:8080/jmx-console antes de começar a monitorar em alguns casos. Se não fizer isso o maldito zapcat não funciona. Tipo que não precisa fazer nada na jmx-console, é só acessar que o zapcat passa a funcionar.

- O template do zapcat não funciona com Zabbix Server 1.8.3, sei que a partir do 1.8.4 funciona bem e com o Zabbix Server 1.6 também funciona.

- O zapcat-1.2.war não funciona no JBOSS AS 4.0.2, a partir do 4.2 já pode usar sem medo de ser feliz.

Déo, tá ai, acho que melhor que o txt que eu prometi :D

Abraços