Administração do sistema
T2 - Placeholder MemoryUsage
RT.FAQ-8432
Existe um placeholder que apresenta o uso/status atual de memória da JVM.
Para usá-lo, basta acrescentar ${memoryUsage} na APP.UI.FOOTER_CONTENT.
Uma vez incluído, ele apresentará um valor percentual no rodapé da aplicação. Quando colocamos o mouse sobre ele, outros detalhes são apresentados:
O valor percentual apresentado é a média das últimas 10 requisições feitas para o sistema.
Para interpretar os números apresentados no hint, precisamos entender que:
- O Java possui uma área de memoria chamado de Heap. Todos os objetos criados são alocados dentro desta área.
- A Heap tem um tamanho inicial definido na inicialização da JVM. Quando necessário, esta área PODE crescer até um valor máximo também definido da inicialização. No caso acima, esta área está com 386 MB (current heap size) e pode crescer até 1345 MB (heap size limit).
- Os objetos java vão sendo criados dentro da Heap. Se a Heap não tiver mais espaço para armazenar um novo objeto, a JVM aumenta a Heap até que o seu limite seja alcançado. No caso acima, o tamanho do espaço ocupado por estes objetos é 25 MB (used).
- Quando um objeto não é mais necessário, ele não é imediatamente excluído da Heap. De tempos em tempos, a JVM executa um processo chamado de gc (Garbage Colector = coleta de lixo). Este processo varre toda a Heap e remove objetos que não são mais utilizados. No caso acima, a Heap chegou a ter 69 MB ocupados com objetos.
Exemplo:
- 360 MB free - Espaço disponível dentro da heap atual
- 25 MB used (1%) - Espaço utilizado para objetos e o percentual que isso representa para a capacidade limite.
- 69 MB max used (5%) - Espaço máximo utilizado para objetos desde que a inicialização do sistema.
- 386 MB current heap size - Tamanho atual da Memory Heap.
- 1345 MB heap size limit - Tamanho máximo que a heap poderá ter.
Observações:
Além da Heap, existem outras áreas de memória que não conseguimos monitorar diretamente. Exemplos: Stack e Perm.
O monitoramento acima é com base apenas em "fotografias" tiradas no final de cada requisição do sistema. Podemos ter processos que ocupem mais memória e quem forcem a execução de um gc antes do final da requisição e, portanto, não sendo refletidos no PlaceHolder.