Olá pessoal. Vocês também seguem o lema que a vida é curta demais para se preocupar com Warnings? Quem nunca ignorou um Warning e foi feliz no final? Porém, quando estamos lidando com ambientes de produção, quanto menos chances Murphy tiver, melhor.
Tendo isso em mente, vou escrever sobre um WARNING que vemos quando o Cassandra inicia nos alertando da falta de uma biblioteca importante.
Trata-se da lib jemalloc, uma biblioteca que permite uma maior escalabilidade e tem um desempenho melhor na alocação de memória no Linux. Se quiser ir a fundo no assunto, olhar comparações com outras libs, recomendo este post do time de engenharia do facebook.
No Cassandra seu uso é uma recomendação que vemos em qualquer artigo ou documentação de boas práticas do Linux. É tão importante que o próprio Cassandra reclama de sua falta. O warning traz a seguinte mensagem: “jemalloc shared library could not be preloaded to speed up memory allocations“.
/lib64 /lib /usr/lib64 /usr/lib /usr/lib64/bind9-export /usr/lib64/mysql /lib /lib64 /lib/sse2 /lib64/sse2 /lib64/tls
Quando o arquivo é encontrado, algo como /usr/lib/libjemalloc.so, o processo Java subirá com a opção:
-Dcassandra.libjemalloc=/usr/lib/libjemalloc.so
Vamos explorar um pouco mais o processo Java em execução em um ambiente com e sem a jemmaloc, respectivamente. No host ip-20-0-1-126 podemos ver que a lib está instalada e no host ip-20-0-1-143 não. Como podemos ver, no host que temos a jemalloc instalada, ela aparece no processo Java em execução.
A última pergunta que fica é: o que fazer quando ela não está instalada?
A forma mais simples, no CentOS, é instalar o pacote EPEL, que traz um repositório com pacotes extras para usar no seu Linux. Após sua instalação, basta instalar o pacote jemalloc.
[root@ip-20-0-1-143 ~]# yum install epel-release
...
Installed:
epel-release.noarch 0:7-11
Complete!
[root@ip-20-0-1-143 ~]# yum install jemalloc
...
Installed:
jemalloc.x86_64 0:3.6.0-1.el7
Complete!
[root@ip-20-0-1-143 ~]#
Após a instalação, basta restartar seu cassandra e você verá no log que ela foi carregada com sucesso e seu processo Java incluirá a jemalloc.
INFO: jemalloc seems to be preloaded from /usr/lib64/libjemalloc.so.1
Espero que tenha contribuído e vocês tenham gostado. Qualquer dúvida, só nos escrever.