Aquecendo aplicativos Java de alto rendimento
-
20-09-2019 - |
Pergunta
Recentemente, aprendi sobre cenários que exigem o aquecimento de um aplicativo (com requisitos de alto rendimento) antes de começarem a atender solicitações reais.A lógica por trás disso era permitir que o JIT fizesse sua mágica de desempenho!
Isso é uma norma para aplicativos Java ou geralmente é feito para aplicativos com muita memória (ocupação pesada)?
Solução
Se você está falando sobre um aplicativo/site de alto tráfego, o JIT é um problema muito menor.O maior problema é aquecer (preencher) todas as camadas de cache que você precisa.Por exemplo regiões ehcache que estão sendo preenchidas a partir do modo de hibernação.Isso ocorre porque as operações relacionadas a IO são ordens de magnitude mais lentas do que qualquer coisa que acontece dentro da CPU (isto é, a menos que você esteja calculando fractais :)
Outras dicas
A questão é: quando você gostaria de saia do seu caminho para fazer isso?
Se você lançar um webapp e ele estiver IMEDIATAMENTE ativo, enquanto você o "aquece", estará adicionando carga extra, o que é contraproducente.O mesmo acontece quando um aplicativo de desktop é iniciado.Não adianta aquecer se o usuário vai começar a usá-lo imediatamente.Ou pior, não permitir que o usuário interaja enquanto você aquece o aplicativo.
Se você implementar um webapp e testar a implantação antes de apontar seus balanceadores de carga para ele, então você já o aqueceu como resultado secundário.
Além de resposta de Cherouvim, posso pensar em alguns outros problemas que exigem aquecimento:
- Instanciação de objetos (lazy loading, singletons etc.);
- Alocação de heap (se o seu
Xms
é menor que o seuXmx
).
Imagino que o sistema operacional também se sintonize com o comportamento de um aplicativo, de modo que as chamadas do sistema operacional também possam ser afetadas por um período de aquecimento.
A maioria dos itens acima (preenchimento de cache, inicialização de objeto) não é específica de Java.