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 |
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. |
|
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. |
|
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. |
|
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 |
|
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 |
|
Ver a situação da coleta de lixo nova geração |
jstat -gcnew pid: informações novo objeto |
|
Ver caso para uma nova geração de capacidade de armazenamento |
jstat -gcnewcapacity pid: Informação e pegada de novos objetos |
|
Ver o caso para a ocorrência velha geração e geração permanente de GC |
jstat -gcold pid: Informações objetos antigos |
|
Geração mais velha para a visualização de capacidade |
jstat -gcoldcapacity pid: informação e sua pegada de objetos antigos |
|
Para visualizar a capacidade permanente de geração |
jstat -gcpermcapacity pid: Informação e seus objetos pegada perm |
|
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 |
|
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.