10 Opções importantes da JVM para o sistema de aplicativos JAVA de produção

Conheça as opções essenciais da JVM (Java Virtual Machine) para obter melhor desempenho e depuração.


Se você é um desenvolvedor Java ou administrador de middleware, deve saber o que as opções da JVM significam, além de sua importância e como elas afetam seu aplicativo. Vamos descobrir eles.

Visão geral das opções da JVM

Falando sobre opções da JVM, existem três tipos de opções que você pode incluir nas suas opções JVM, padrão, não padrão e avançada. Se você tentar uma opção avançada, sempre use a opção com -XX. Da mesma forma, se você estiver aplicando uma opção não padrão, use -X. As opções padrão não acrescentam nada à opção.

Quais opções da JVM são usadas pelo seu aplicativo?

Se o aplicativo estiver sendo executado no Linux, você pode usar ps -ef | grep java para identificar o processo Java e examinar as opções da JVM impressas como argumentos do processo. Se mais de um processo Java estiver em andamento no sistema, pode ser necessário usar uma palavra-chave exclusiva do seu aplicativo Java.

Se o seu argumento for muito longo, tente usar ps -auxww, pois esse comando também mostrará uma longa lista de argumentos.

Depois de ter uma lista de sinalizadores da JVM, você pode ter uma idéia sobre os comportamentos de qualquer aplicativo Java, por exemplo, Tomcat.

Tamanho de heap Java

 -Xms – definir o tamanho inicial do heap Java
-Xmx – definir o tamanho máximo de heap Java
-Xss – definir tamanho da pilha de encadeamentos java

-Xms – Essa opção é definir o tamanho do heap inicial para a JVM, por exemplo, Xms2048m, o que significa que um tamanho de heap inicial da JVM é de 2 GB. Portanto, quando uma JVM é iniciada, a memória heap será muito grande. Surpreendentemente sim! Isso é realizado para evitar o redimensionamento durante a inicialização e aprimorar o tempo de inicialização da JVM.

-Xmx – Essa opção é definir o tamanho máximo de heap da JVM, por exemplo, Xmx2048m, o que significa que o tamanho máximo de heap da JVM será de apenas 2 GB.

Você sempre terá o Xmsand-Xmx juntos.

Definir porcentagem da pilha

-XX: MaxHeapFreeRatio – define a porcentagem máxima de heap free após o GC para evitar encolher.

-XX: MinHeapFreeRatio – define a porcentagem mínima de heap free após o GC para evitar a expansão; para monitorar o uso de heap, você pode usar o JCosole.

Ativar compartilhamento de dados de classe

Especifique a opção Xshareclasses para ativar o compartilhamento de dados de classe em um cache de classe compartilhada. A JVM se conecta a um cache existente ou cria um cache se ele não existir. Você pode ter vários caches e especificar o cache correto adicionando uma subopção à opção -Xshareclasses.

Tamanho PermGen

As opções anteriores da JVM definem o tamanho da memória heap, mas -XX: PermSize é para definir o tamanho do espaço PermGen, onde o conjunto de cadeias e os metadados da classe são salvos. Essa opção é particularmente eficaz para um servidor Web como o Tomcat, que frequentemente carrega classes do aplicativo Web durante a implantação..

A propósito, vale a pena perceber que o espaço PermGen é ocupado pelo Metaspace no Java 8, e essa opção não é aplicável se você estiver executando com o JRE 8 JVM.

Imprimir GC

-verbose: gc – registra coletor de lixo é executado e quanto tempo eles estão levando.
-XX: + PrintGCDetails – inclui os dados de -verbose: gc, mas também adiciona informações sobre o tamanho da nova geração e tempos mais precisos.
-XX: -PrintGCTimeStamps – Imprimir timestamps na coleta de lixo.

Essas opções da JVM são usadas para ativar o log de coleta de lixo, que é altamente eficaz para a operação sensível à latência. Costumávamos estar em sistemas onde buscamos latências de microssegundos e, se você reconhecer, uma grande coleta de lixo pode durar vários milissegundos.

Portanto, optamos pela arquitetura livre de GC, como o disruptor LMAX, mas, de fato, se você não está buscando um aplicativo sensível à ultra latência, esta opção útil aconselhará estatísticas importantes do GC. Você saberá se é uma coleta de lixo grande ou menor, que tipo de coletor de lixo é aplicado, com que frequência a memória é restaurada e quanto tempo ela demora etc..

Manipulando o erro ‘OutOfMemory’

Para acionar o despejo de heap sem memória, você pode usar -XX: + HeapDumpOnOutOfMemoryError

Esta opção da JVM produz um despejo de pilha quando sua JVM morre com o Erro OutOfMemory. Não há despesas envolvidas, a menos que um OOM realmente ocorra. Esse sinalizador é um requisito para os sistemas de produção, pois geralmente é a única maneira de determinar profundamente o problema.

O despejo de heap será configurado no “diretório atual” da JVM por padrão. Se você deseja criar dumps de heap em um diretório específico, execute

-XX: HeapDumpPath = [diretório do caminho para o heap-dump]
-XX: + UseGCOverheadLimit
-XX: OnOutOfMemoryError ="< cmd args >;< cmd args >"

O arquivo de despejo de heap pode ter um tamanho enorme, até gigabytes, para garantir que o sistema de arquivos de destino permita capacidade suficiente.

Se queremos reiniciar o servidor imediatamente após a falta de memória, podemos definir esse parâmetro com a mesma finalidade –

XX: OnOutOfMemoryError ="shutdown -r"

Rastrear carregamento e descarregamento de classe

-XX: + TraceClassLoading e -XX: + TraceClassUnloading são duas opções da JVM que usamos para imprimir informações de registro sempre que as classes são carregadas na JVM ou descarregadas da JVM. Esses sinalizadores da JVM são úteis se você tiver algum tipo de vazamento de memória vinculado ao carregador de classes e suspeitar que as classes não estão descarregando ou coletando lixo..

Caminho de classe Java

Falando sobre o JAVA Classpath then-Xbootclasspath especifica as entradas do caminho de classe que queremos carregar sem verificação. A JVM verifica todas as classes que ele carrega para garantir que não tente desreferenciar um objeto com um int, pop de entradas extras da pilha ou empurrar muitas e assim por diante.. 

A colocação de classe no caminho do bootclass também ignora o custo, mas só deve ser usada quando você souber que as classes foram verificadas muitas vezes antes. No JRuby, isso reduziu o tempo de inicialização pela metade e mais para um script simples.

Criação de perfil

O Java Profiling é o processo de monitorar vários parâmetros de níveis da JVM, como Execuções de Método, Execuções de Encadeamento, Coletas de Lixo e Criações de Objeto. O Java Profiling fornece uma visão mais refinada da execução do aplicativo de destino e da utilização de recursos, além de.

-Xprof
-Xrunhprof

Ambiente de 64 bits

No ambiente do SO em que os pacotes de 32 e 64 bits estão instalados, a JVM escolhe automaticamente os pacotes ambientais de 32 bits como padrão..

Se quisermos definir o ambiente para 64 bits manualmente, podemos fazer isso usando o parâmetro -d. E, obviamente, o bit do SO pode ser 32 ou 64.

Conclusão

Espero que isso ajude você a configurar os parâmetros da JVM para seu aplicativo. Se você estiver interessado em aprender mais sobre o gerenciamento de memória java, confira este Curso Udemy.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map