JDK vem com ferramentas básicas de ajuste

JDK vem com ferramentas

Ferramenta de linha de comando

jps (processo de consulta)

Liste os processos da máquina virtual em execução na máquina atual. JPS faz pesquisas no diretório temporário do sistema operacional (portanto, algumas informações podem não ser exibidas completamente)

 

-q: mostra apenas o processo

-m: exibe os parâmetros passados ​​pela função principal, o olá abaixo são os parâmetros inseridos na linha de comando quando o programa é executado

-l: envia o nome completo do pacote ou o nome completo jar da classe principal do aplicativo

-v: Lista os parâmetros jvm, -Xms20m -Xmx50m são os parâmetros JVM especificados pelo programa de inicialização

jstat (monitoramento)

Ferramenta de comando usada para monitorar várias informações de status operacional de máquinas virtuais. Ele pode exibir dados em execução, como carregamento de classe, memória, coleta de lixo, compilação JIT, etc. no processo de máquina virtual local ou remota. Em um servidor que não tem uma interface gráfica GUI e fornece apenas um ambiente de console de texto simples, ele será um local virtual durante o tempo de execução. A ferramenta de escolha para problemas de desempenho da máquina.

Parâmetros comuns:

-class (carregador de classe)

-compiler (JIT)

-gc (status de heap GC)

-gccapacity (tamanho de cada distrito)

-gcnew (novas estatísticas do distrito)

-gcnewcapacity (novo tamanho de área)

-gcold (estatísticas antigas do distrito)

-gcoldcapacity (antigo tamanho da área)

-gcpermcapacity (tamanho da área permanente)

-gcutil (resumo das estatísticas do GC)

-printcompilation (estatísticas de compilação HotSpot)

Por exemplo: queremos contar GC, que é a coleta de lixo. Em seguida, basta usar esse comando.

jstat-gc 13616 (este 13616 é o processo JVM, obtido por meio do comando JPS), portanto, as estatísticas são valores em tempo real. Então, em muitos casos, podemos jogar assim para ver o valor da mudança.

 

Primeiro use JPS para localizar o processo iniciado pela função principal

 

Supondo que leva 250 milissegundos para consultar o status da coleta de lixo desse processo, um total de 10 consultas são feitas. Então, o comando deve ser jstat -gc 4700 250 10. Os resultados da consulta são os seguintes:

 

S0C: O tamanho da primeira área sobrevivente (da área)

S1C: O tamanho da segunda área de sobrevivência (para a área)

S0U: O tamanho usado da primeira área sobrevivente

S1U: O tamanho usado da segunda área sobrevivente

CE: O tamanho da área do Éden

UE: Use o tamanho da área do Éden

OC: o tamanho da velhice OU: o tamanho usado na velhice

MC: tamanho da área do método

MU: Tamanho da área do método usada

CCSC: tamanho do espaço de classe compactado

CCSU: tamanho de uso do espaço de classe compactado

YGC: O número de coletas de lixo da geração jovem

YGCT: coleta de lixo de geração jovem consome tempo

FGC: Número de coletas de lixo na velhice

FGCT: A coleta de lixo na velhice consome tempo

GCT: Tempo total consumido pela coleta de lixo

 

jinfo (visualizar e modificar os parâmetros da máquina virtual)

jinfo -sysprops pode visualizar os parâmetros obtidos por System.getProperties ()

jinfo -flag não é explicitamente especificado pelo valor padrão do sistema do parâmetro

jinfo -flags (notas) exibe os parâmetros da máquina virtual

 

Classificação do parâmetro VM

Referência de parâmetro de linha de comando JVM: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

 

 

No início do padrão, todas as máquinas virtuais suportam

Certifique-se de que todas as implementações da Java Virtual Machine (JVM) suportam opções padrão. Eles são usados ​​para realizar operações comuns, como verificar a versão do JRE, definir o caminho de classe, ativar a saída detalhada, etc.

 

Parâmetros exclusivos da máquina virtual HotSpot

As opções não padrão são opções genéricas específicas para a máquina virtual Java HotSpot, portanto, não há garantia de que todas as implementações JVM as suportarão e podem mudar. Essas opções começam com -X.

-Xms30m -Xmx30m -Xss1m

 

opções avançadas

Essas são opções do desenvolvedor usadas para ajustar áreas específicas da operação da máquina virtual Java HotSpot. Essas áreas geralmente têm requisitos de sistema específicos e podem exigir acesso privilegiado aos parâmetros de configuração do sistema. Não há garantia de que todas as implementações de JVM os suportem e eles podem mudar.

 

No Windows, você pode consultar todos os parâmetros -XX por meio do seguinte java -XX: + PrintFlagsFinal --version

 

Nota: O parâmetro de gerenciável significa que pode ser modificado em tempo de execução.

O exemplo de demonstração é o seguinte:

Em primeiro lugar, sabemos pela figura acima que o parâmetro XX do PrintGC pode ser modificado em tempo de execução.

jinfo -flag - [parâmetro] pid pode modificar parâmetros

Caso:

  1. Ao executar o programa, não imprimimos GC

 

  1. Visualize os parâmetros por meio do jinfo e imprima os detalhes do GC

 

  1. Modifique os parâmetros por meio do jinfo e imprima os detalhes do GC

 

  1. Volte ao programa para ver o console, as informações do GC apareceram, o que prova que os parâmetros podem ser modificados durante a operação

 

Resumo: Por meio do comando jinfo, podemos abrir temporariamente o log do GC no ambiente de produção ou configurar alguns dados. ( Sem a necessidade de reiniciar o aplicativo ), também é um comando fundamental para solucionarmos problemas.

jmap (gerar heap dump snapshot dump)

Usado para gerar instantâneos de dump do heap (geralmente chamados de arquivos heapdump ou dump). O papel do jmap não é apenas obter arquivos de despejo, ele também pode consultar a fila de execução final, heap Java e informações detalhadas de geração permanente, como uso de espaço, qual coletor é usado atualmente, etc. Como o comando jinfo, muitas funções do jmap são restritas na plataforma Windows, exceto para a opção -dump para gerar arquivos dump e a opção -histo para visualizar as estatísticas de instância e uso de espaço de cada classe. Exceto fornecido, as outras opções podem ser usado apenas no Linux / Solaris.

-heap print heap

jmap –heap <pid>

 

Configuração de heap: ## configuração de heap, que é o resultado da configuração de parâmetro de JVM [normalmente o dito tomcat configura parâmetros de JVM, que os está configurando]

MinHeapFreeRatio = 40 ## Taxa mínima de uso de heap

MaxHeapFreeRatio = 70 ## Taxa máxima de heap disponível

MaxHeapSize

= 2147483648 (2048,0 MB) ## Tamanho máximo de heap

NewSize

= 268435456 (256,0 MB) ## Tamanho de alocação de nova geração

MaxNewSize

= 268435456 (256,0 MB) ## Tamanho máximo de alocação de nova geração

OldSize

= 5439488 (5,1875 MB) ## Tamanho antigo

NewRatio

= 2 ## Proporção de nova geração

SurvivorRatio

= 8 ## A proporção da nova geração para o sobrevivente

PermSize

= 134217728 (128,0 MB) ## perm área tamanho de geração permanente

MaxPermSize

= 134217728 (128,0 MB) ## A área máxima de perm que pode ser alocada é o tamanho da geração permanente

Uso de heap: ## Uso de heap [o uso real de memória heap]

Nova Geração (Eden + 1 Survivor Space): ## New Generation (Eden District + Survior (1 + 2) Space)

capacidade = 241631232 (230,4375 MB) ## Eden District Capacidade

usava

= 77776272 (74,17323303222656 MB) ## Tamanho já usado

gratuitamente

= 163854960 (156,26426696777344 MB) ## Capacidade restante

32,188004570534986% usado ## Razão de uso

Espaço Eden: ## 伊登 区

capacidade = 214827008 (204,875 MB) ## Capacidade do distrito de Eden

usava

= 74442288 (70.99369812011719MB) ## Usado no distrito de Eden

gratuitamente

= 140384720 (133.8813018798828MB) ## Capacidade restante atual do Eden District

34.65220164496263% usado ## Uso do Eden District

Do espaço: ## survior1 区

capacidade = 26804224 (25,5625 MB) ## survior1 Capacidade do distrito

usava

= 3333984 (3.179534912109375MB) ## surviror1 A área foi usada gratuitamente

= 23470240 (22.382965087890625MB) ## surviror1 Capacidade restante da área

12,43827838477995% usado ## taxa de uso de área survior1

Para o espaço: ## survior2 区

capacidade = 26804224 (25,5625 MB) ## survior2 Capacidade do distrito

usava

= 0 (0,0 MB) ## survior2 Área usada

gratuitamente

= 26804224 (25,5625 MB) ## capacidade restante de área survior2

0,0% usado ## taxa de área usada survior2

PS Old Generation: ## Old Generation Usage

capacidade = 1879048192 (1792,0 MB) ## Capacidade para idosos

usava

= 30847928 (29,41887664794922 MB) ## Capacidade usada na velhice

gratuitamente

= 1848200264 (1762.5811233520508MB) ## Capacidade restante na velhice

1,6416783843721663% usado ## Razão usada de velhice

 

-histo Imprimir o número de instâncias de cada classe , o uso de memória , e informações sobre o nome completo da classe .

jmap –histo <pid>

jmap –histo: live <pid>

Se o subparâmetro ao vivo for adicionado, apenas o número de objetos ao vivo será contado

 

Mas existem muitos monitores como este, geralmente é feito no Linux

jmap –histo 1196 | cabeça -20

(Isso mostrará apenas os 20 principais dados) Parâmetros menos importantes

-finalizerinfo imprime informações sobre objetos esperando para serem reciclados, e o comando jmap -clstats é melhor não ser usado

 

-dump  gerado instantâneo de despejo de heap (mais importante)

jmap -dump: live, format = b, file = heap.bin <pid>

Sun JDK fornece comandos jhat (JVM Heap Analysis Tool) para serem usados ​​com jmap para analisar instantâneos de despejo de heap gerados por jmap

 

jhat (analisar arquivos de despejo com Jmap)

jhat nome do arquivo de despejo

Após a tela exibir o prompt "Servidor está pronto.", O usuário pode acessar os detalhes digitando http: // localhost: 7000 / no navegador

 

Use jhat para gerar análise de arquivo de despejo de heap no servidor (geralmente não recomendado, afinal, ele consome recursos do servidor, por exemplo, se um arquivo tem 1 G, ele precisa de cerca de 1 G de recursos de memória)

jstack (gerar um instantâneo do thread no momento atual do despejo da máquina virtual)

O comando (Stack Trace for Java) é usado para gerar um instantâneo de thread da máquina virtual no momento atual. O instantâneo de thread é a coleção de pilhas de métodos sendo executados por cada thread na máquina virtual atual. O objetivo principal de gerar um instantâneo de thread é localizar a causa da longa pausa do thread, como deadlock entre threads, loop infinito tempo causado pela solicitação de recursos externos. Espera etc. são motivos comuns que fazem com que um thread pare por um longo tempo. No código, você pode usar o método getAllStackTraces () da classe java.lang.Thread para obter os objetos StackTraceElement de todos os threads na máquina virtual. Use este método para passar algumas linhas simples

O código completa a maioria das funções do jstack. No projeto real, você pode desejar chamar esse método para ser uma página do administrador e pode usar o navegador para visualizar a pilha de threads a qualquer momento.

De um modo geral, jstack é usado principalmente para verificar se há uma situação de deadlock

 

Resumo da ferramenta de comando

Servidor de produção recomendado para abrir

 

     1. -XX: -HeapDumpOnOutOfMemoryError é desativado por padrão,

É recomendável habilitá-lo e gerar um arquivo de despejo quando java.lang.OutOfMemoryError ocorrer.

Registre o instantâneo da memória heap nesse momento.

     2. -XX: HeapDumpPath =. / Java_pid <pid> .hprof

É usado para definir o caminho do arquivo de armazenamento do instantâneo da memória heap.O padrão é o local de início do processo java.

Ligue antes de sintonizar, desligue depois de sintonizar

     3. -XX: + PrintGC

O rastreamento de depuração imprime apenas parâmetros de informações GC simples :

     4. -XX: + PrintGCDetails, + XX: + PrintGCTimeStamps

Imprimir informações detalhadas do GC

     5. -Xlogger: logpath

Defina o caminho do log do gc, como: -Xlogger: log / gc.log, defina o caminho do gc.log para o diretório atual

Diretório de log.

Cenário do aplicativo: Grave o gc log independentemente no arquivo de log e compare o log do GC com o log de negócios do sistema

Separação, conveniente para os desenvolvedores rastrear e analisar.

Considere usar

  1. -XX: + PrintHeapAtGC , imprimir informações de envio

Configuração de parâmetro: -XX : + PrintHeapAtGC

Cenário de aplicação: obtenha o uso de heap antes e depois de cada coleta de lixo

     2. -XX: + Método do parâmetro TraceClassLoading : -XX: + TraceClassLoading

Cenário do aplicativo: veja o processo de carregamento da classe e informações específicas da classe nas informações do console do sistema , que podem ser usadas para

Analise a ordem de carregamento das classes e se elas podem ser simplificadas.

     3. -XX: + DisableExplicitGC proíbe explicitamente chamar System.gc ( ) em tempo de execução

Ferramenta de visualização

JMX (Java Management Extensions) é uma estrutura para implantar funções de gerenciamento para aplicativos, dispositivos, sistemas, etc. A JMX pode desenvolver com flexibilidade sistemas integrados, aplicativos de gerenciamento de rede e serviços em uma série de plataformas de sistema operacional heterogêneas, arquiteturas de sistema e protocolos de transmissão de rede.

Para gerenciar processos remotos, você precisa adicionar os parâmetros de inicialização do programa remoto:

-Djava.rmi.server.hostname =… ..

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port = 8888

-Dcom.sun.management.jmxremote.authenticate = false

-Dcom.sun.management.jmxremote.ssl = false

Jconsole

 

visualvm

Endereço do centro de plug-in

https://visualvm.github.io

Mas preste atenção ao problema da versão. JDKs diferentes têm visualvm diferente. Você precisa baixar a versão correspondente ao baixar o plug-in.

De um modo geral, esta ferramenta é usada para depuração local. De modo geral, você geralmente não pode usá-la na produção (a menos que a conexão remota esteja ativada)

 

Acho que você gosta

Origin blog.csdn.net/weixin_47184173/article/details/110253809
Recomendado
Clasificación