Continuar a falar sobre otimização deve saber série de JVM - monitorando ferramenta

página blog pessoal de navegação (clique à direita ligação para abrir um blog pessoal): Daniel levá-lo em tecnologia de pilha 

Anterior através do conhecimento JVM coleta de lixo, entendemos a alocação de memória JVM e coleta de lixo é a forma de lidar com eles. Teoria é uma ferramenta para orientar a prática, com a orientação teórica, o posicionamento do tempo, conhecimento e experiência é a base fundamental, os dados podem fornecer a base para nós.

Em um problema on-line comum quando a maioria de nós irá enfrentar os seguintes problemas:

  • vazamento de memória
  • Um aumento súbito processo de cpu
  • impasse fio
  • Lento para responder ... e assim por diante outras questões.

Se você encontrar esse problema acima, pode haver uma variedade de ferramentas on-line para apoiar vista local, mas para alinhar, não tanto para suportar ferramentas de depuração locais, como é que vamos baseada ferramenta de monitoramento para localizar o problema?

Nós normalmente baseado em dados de localização recolhidos, e a recolha de dados é inseparável do processo de ferramentas, tais como acompanhamento: logs de funcionamento, da pilha de excepção, logs GC, instantâneos de rosca, instantâneos da pilha. Muitas vezes usando a análise apropriada e ferramentas de monitoramento pode acelerar nossa análise de dados, posicionando velocidade para resolver o problema. Abaixo, vamos explicar os detalhes.

 

A, comum jvm ferramentas e instruções de monitoramento

 

1, JPS: ferramenta de status do processo JVM

jps [options] [hostid]

 Se você não especificar o padrão é o hostid host atual ou em um servidor. 

 opções de linha de comando parâmetro são os seguintes: 

-q 不输出类名、Jar名和传入main方法的参数

- l 输出main类或Jar的全限名

-m 输出传入main方法的参数

- v 输出传入JVM的参数

Por exemplo:

 

2, jstat: estatísticas JVM ferramenta de monitoramento

jstat é o comando para executar as informações de status de máquina virtual para uma variedade de ferramenta de linha de conhecimento. Ele pode exibir máquina local ou remoto virtual no processo de carregamento de classe, memória, coleta de lixo, o compilador JIT e outros dados operacionais, é a ferramenta de escolha para o desempenho de posicionamento jvm online.

formato:

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]

generalOption - 单个的常用的命令行选项,如-help, -options, 或 -version。

outputOptions -一个或多个输出选项,由单个的statOption选项组成,可以和-t, -h, and -J等选项配合使用。

opções de parâmetros:

Opção

Displays

Ex

classe

Ver estatísticas de condições de carregamento de classes

jstat de classe pid: exibindo informações sobre o número de classe carregada, e espaço ocupado.

compilador

Ver estatísticas em compilador em tempo real para caso de compilação HotSpot

 jstat -compiler pid: VM exibição de informações em tempo real, tais como o número de compilação. 

gc

Ver JVM coleta de lixo amontoado situação de estatísticas

jstat -gc pid: informações gc podem ser exibidos para ver o número de gc, e tempo. Os últimos cinco, respectivamente, o número de jovens gc, o tempo gc jovem, o número de gc inteiro, tempo gc cheia, o tempo total de gc. 

gccapacity

capacidade de exibição de armazenamento é a nova geração, a velha geração em geração permanente

 jstat -gccapacity: pode ser exibida, usando a memória VM três gerações (jovens, idosos, perm) ocupado pelo tamanho do objeto e

gccause

Ver estatísticas de coleta de lixo (esta opção e -gcutil como), se a coleta de lixo ocorre, ele irá exibir a última vez e as razões para a coleta de lixo está ocorrendo atualmente.

jstat -gccause: razão show de gc

gcnew

Ver a situação da coleta de lixo nova geração

 jstat -gcnew pid: informações novo objeto

gcnewcapacity

Ver caso para uma nova geração de capacidade de armazenamento

  jstat -gcnewcapacity pid: Informação e pegada de novos objetos

gcold

Ver o caso para a ocorrência velha geração e geração permanente de GC

jstat -gcold pid: Informações objetos antigos

gcoldcapacity

Geração mais velha para a visualização de capacidade

jstat -gcoldcapacity pid: informação e sua pegada de objetos antigos

gcpermcapacity

Para visualizar a capacidade permanente de geração

jstat -gcpermcapacity pid: Informação e seus objetos pegada perm

gcutil

Ver situação da nova geração, em nome dos titulares da coleção antiga geração e lixo

jstat -util pid: gc Informação Estatística Estatística

printcompilation

compilação HotSpot de métodos estatísticos

 jstat -printcompilation pid: execução VM das informações atuais

Por exemplo :

implementação Ver gc: jstat-gcutil 27777

 

3, jinfo: informações de configuração java

formato:

jinfo[option] pid

Por exemplo: Get JVM em execução e iniciar algum do processo atual.

 

4, jmap: ferramenta java mapeamento de memória

fim jmap para a produção de snapshot despejo de pilha. Imprimir um processo de java (usando pid), todos os 'objetos' na memória (tais como: produzir esses objetos, e seu número).

formato:

jmap [ option ] pid

jmap [ option ] executable core

jmap [ option ] [server-id@]remote-hostname-or-IP

 

opções de parâmetros:

-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件. 

-finalizerinfo 打印正等候回收的对象的信息.

-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.

-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量. 

-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来. 

-F 强迫.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效. 

-h | -help 打印辅助信息 

-J 传递参数给jmap启动的jvm. 

Por exemplo:

Use jmap -heap pid visualizar o uso processo de memória heap, incluindo o uso de algoritmo de GC, os parâmetros de configuração de pilha, e cada uso geração de memória heap:

Use jmap -histo [: ao vivo] pid para ver o número de objetos na memória heap, o tamanho do histograma.

5, jhat: heap JVM instantâneo ferramentas de análise

jamp comando jhat com o uso de armazenamento rápida usada para analisar a produção instantâneo mapa heap. jhat construiu uma miniatura http / Html servidor, você pode encontrar o ponto de vista no navegador. No entanto, a tentativa propôs a fazer, uma vez arquivo lá dumpt, você pode puxar a partir do baixo ambiente de produção, e depois analisados ​​por ferramentas de visualização de locais, tanto para reduzir a pressão da linha no servidor, não pode ser analisado em detalhes suficientes (como MAT / jprofile / VisualVM), etc. .

6, jstack: java ferramenta de rastreamento de pilha

fio jstack usado para gerar java instantâneo da máquina virtual da hora atual. Um instantâneo é um método de máquina virtual o fio corrente java cada recolha da pilha de encadeamentos de execução, a principal finalidade de gerar um instantâneo da rosca é localizar o fio aparece pausa longa, tais como bloqueios inter-thread, ciclo infinito, a longo solicitado recursos externos causados ​​pela tempo para esperar assim por diante.

formato:

jstack [ option ] pid

jstack [ option ] executable core

jstack [ option ] [server-id@]remote-hostname-or-IP

 

parâmetros:

-F当’jstack [-l] pid’没有相应的时候强制打印栈信息

-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

-m打印java和native c/c++框架的所有栈信息.

-h | -help打印帮助信息

pid 需要被打印配置信息的java进程id,可以用jps查询.

Encontre o será usado mais cpu-consuming exemplos seguintes.

 

Em segundo lugar, ferramentas de visualização

JVM ferramentas de visualização comuns para o acompanhamento, além de JConsole e VisualVM jdk próprio fornece, bem como jprofilter de terceiros, perfino, YourKit, Perf4j, JProbe, MAT e assim por diante. Estas ferramentas têm grandemente enriquecido o nosso posicionamento e maneira de otimização da JVM.

Usando essas ferramentas, existem muitos tutoriais on-line fornecidas aqui não vai introduzir demais. Para VisualVM, a comparação é recomendado que, além de a JVM invasivos menor do que, ou JDK própria equipe de desenvolvimento, acredito que o futuro será mais rico em recursos e perfeito. jprofilter para a ferramenta de monitoramento de terceiros que fornece funcionalidade e visualização o mais completo, mais apoio ide corrente seus plug-ins para depuração e ajuste de desempenho antes da-line on podem ser usados ​​juntos.

Além da informação linha de despejo de pilha, a linha deve tentar puxar para ferramentas de visualização para analisar, de modo que uma análise mais detalhada. Se para algumas questões urgentes precisam ser monitoramento on-line, função remoto pode ser usado para VisualVM, o que requer as funções uso MAT em tool.jar.

 

Em terceiro lugar, a aplicação

 

1, a CPU subir

Às vezes algum momento, o aplicativo pode ser um problema em algum momento haverá um aumento repentino no cpu online. Que deve estar familiarizado com algumas instruções, rápida investigação eo código correspondente.

 

1. Localize o processo mais intensivo de CPU

instrução:

top

 

2. Localize este processo consome mais fio cpu

instrução:

top -Hp pid

3. hex Conversão

printf “%x\n” 15332 // 转换16进制(转换后为0x3be4) 

4. Filtro do segmento especificado, as informações a impressão pilha

instrução

jstack pid |grep 'threadPid'  -C5 --color 

jstack 13525 |grep '0x3be4'  -C5 --color  //  打印进程堆栈 并通过线程id,过滤得到线程堆栈信息。

Um programa de informação pode ser visto, a ocupação da CPU excessiva (exemplos acima são apenas exemplificativos, não alto custo em si CPU)

 

2, impasse rosca 

Às vezes, haverá problemas de impasse rosca cenário de implantação, mas não é comum. Neste momento, estamos habituados a ver em que jstack. Por exemplo, agora temos um impasse segmento do programa, resultando em algumas operações em espera.

 

1. Encontre o ID do processo java

instrução:

top 或者 jps 

 

2. Verifique o processo Java tópicos instantâneo informações

instrução:

jstack -l pid

Você pode ver a partir da saída, há um impasse fio ocorrido, e apontou que a linha de código que aparece. Assim você pode rapidamente resolver problemas.

 

3, vazamentos de memória OOM

OOM em exceções heap Java são a aplicação prática da exceção estouro de memória comum. Geralmente, somos o primeiro a sair da análise dos instantâneos despejo de pilha despejo de ferramentas de análise de mapeamento de memória (tais como MAT), para confirmar se o objeto em problemas de memória.

Há, naturalmente, muitas razões para o surgimento do OOM, não a aplicação de recursos heap situação de escassez. Também é possível aplicar muitos recursos não são liberados, ou aplicações freqüentes freqüentes, os recursos do sistema estão esgotados. Para os três casos eu preciso de um investigação.

 

OOM três casos:

1. Aplicação de recursos (memória) é muito pequeno, não o suficiente.

2. Aplique para muitos recursos, não há liberação.

3. aplicar muitos recursos, esgotamento de recursos. Por exemplo: muitos segmentos, o segmento de muita memória e assim por diante.

 

1. Aplicação solucionar problemas de recursos da aplicação.

指令:jmap -heap 11869 

 Ver a nova geração, a distribuição de tamanho do uso de memória heap velha geração e ver se a distribuição em si é muito pequeno.

A partir da investigação acima não encontrou nenhum problema com a memória de programa aplicativo.

2. gc investigação

FGC é especialmente o caso, em que cada memória geracional.

指令:jstat -gcutil 11938 1000 每秒输出一次gc的分代内存分配情况,以及gc时间

3. Encontre o objeto de memória mais caro

指令: jmap -histo:live 11869 | more

Disse informações de saída, apenas 161KB objetos máximo de memória, dentro da faixa normal. Se um objeto é um grande espaço, tal como mais de 100Mb, a análise deve incidir sobre os motivos para não liberar.

 

Note-se que, o comando:

jmap -histo:live 11869 | more

执行之后,会造成jvm强制执行一次fgc,在线上不推荐使用,可以采取dump内存快照,线下采用可视化工具进行分析,更加详尽。

jmap -dump:format=b,file=/tmp/dump.dat 11869 

或者采用线上运维工具,自动化处理,方便快速定位,遗失出错时间。

 

4. Confirme se os recursos estão esgotados

  • pstree ver o número de segmentos de processo
  • netstat visualizar o número de ligações de rede

Ou, para usar:

  • ll / proc / $ {PID} / fd | wc -l // número de identificadores abertos
  • ll / proc / $ {PID} / tarefa | wc -l (o mesmo efeito pstree -p | wc -l) // número de threads abertas

 

Estas são algumas de aplicação dos comandos comuns JVM.

Aplicação de uma ferramenta não é a chave mestra, cura, a resolução de problemas é muitas vezes a necessidade de combinar uma variedade de ferramentas para melhor localizar o problema, independentemente das ferramentas de análise, a coisa mais importante é familiarizado com as vantagens de cada ferramenta e fracos. , De modo a aprender uns com os outros, com o uso.

aprendizagem anexado Java / C / C ++ / máquina / Algoritmos e Estruturas de Dados / front-end / Android / Python / programador de leitura / únicos livros livros Daquan:

(Clique no direito de abrir lá no blog pessoal seco): seca Técnico Floração
===== >> ① [Java Daniel levá-lo no caminho para a avançada] << ====
===== >> ② [+ acm algoritmo de estrutura de dados Daniel levá-lo no caminho para a avançada] << ===
===== >> ③ [banco de dados Daniel levá-lo no caminho para a avançada] << == ===
===== >> ④ [front-end Daniel web para levá-lo no caminho para a avançada] << ====
===== >> ⑤ [machine python aprendizagem e Daniel levá-lo entrada para o estrada avançada] << ====
===== >> ⑥ [arquiteto Daniel levá-lo no caminho para a avançada] << =====
===== >> ⑦ [C ++ Daniel avançou para levá-lo na estrada] << ====
===== >> ⑧ [ios Daniel levá-lo no caminho para a avançada] << ====
=====> > ⑨ [segurança web Daniel levá-lo no caminho para a avançada] << =====
===== >> ⑩ [sistema operacional Linux e Daniel levá-lo no caminho para a avançada] << = ====

Não há frutas não ganhos, espero que você jovens amigos, amigos querem aprender técnicas, superando todos os obstáculos no caminho da estrada determinado a amarrar em tecnologia, entender o livro, e em seguida, bater no código, entender o princípio, e ir prática, vai ele vai lhe trazer a vida, seu trabalho, seu futuro um sonho.

Publicado 47 artigos originais · ganhou elogios 0 · Visualizações 271

Acho que você gosta

Origin blog.csdn.net/weixin_41663412/article/details/104886360
Recomendado
Clasificación