[série jvm-12] ajuste de desempenho jvm --- uso básico de ferramentas GUI

Coluna geral da série JVM


contente endereço do link
[1] Conhecendo máquinas virtuais e máquinas virtuais java https://blog.csdn.net/zhenghuishengq/article/details/129544460
[2] O subsistema de carregamento de classes de jvm e o uso básico de jclasslib https://blog.csdn.net/zhenghuishengq/article/details/129610963
[3] A pilha de máquinas virtuais, o contador de programa e a pilha de métodos locais da área privada em tempo de execução https://blog.csdn.net/zhenghuishengq/article/details/129684076
[4] Análise de heap e escape da área compartilhada da área de dados em tempo de execução https://blog.csdn.net/zhenghuishengq/article/details/129796509
[5] A área do método e o pool constante da área compartilhada da área de dados de tempo de execução https://blog.csdn.net/zhenghuishengq/article/details/129958466
[6] Instanciação de objetos, layout de memória e posicionamento de acesso https://blog.csdn.net/zhenghuishengq/article/details/130057210
[7] Mecanismo de execução, interpretador, compilador instantâneo JIT https://blog.csdn.net/zhenghuishengq/article/details/130088553
[8] Proficiente no mecanismo subjacente de String https://blog.csdn.net/zhenghuishengq/article/details/130154453
[9] Os princípios subjacentes e algoritmos da coleta de lixo e o uso básico do JProfiler https://blog.csdn.net/zhenghuishengq/article/details/130261481
[10] Tipos de coletores de lixo e princípios de execução interna https://blog.csdn.net/zhenghuishengq/article/details/130261481
[11] Uso básico de ferramentas de linha de comando para ajuste de desempenho jvm https://blog.csdn.net/zhenghuishengq/article/details/130641456
[12] Uso básico de ferramentas GUI para ajuste de desempenho jvm https://blog.csdn.net/zhenghuishengq/article/details/130745931

Um, monitoramento de diagnóstico JVM e o uso de ferramentas GUI

1. Visão geral das ferramentas GUI

As ferramentas ou combinações de linha de comando podem obter informações básicas relacionadas ao desempenho do aplicativo Java, mas há certas limitações, como a incapacidade de obter análise de dados em nível de método, relacionamentos de chamada entre métodos, número de chamadas e tempo de chamada etc. ao usar a ferramenta de linha de comando, você precisa fazer login na máquina virtual onde o aplicativo Java está localizado, o que não é muito conveniente de usar e, por fim, exibir a saída de dados pelo terminal, o que não é intuitivo o suficiente. Portanto, para resolver os problemas causados ​​pelas ferramentas de linha de comando, nasceram as ferramentas GUI.

Entre as ferramentas gráficas, existem principalmente ferramentas internas do JDK e algumas ferramentas de terceiros. As ferramentas internas do JDK incluem principalmente jConsole, visual VM, JMC, etc., e as ferramentas de terceiros incluem principalmente MAT, JProfiler, Arthas e Btrace . jconsole e visual VM devem ser entendidos e dominados. JProfiler e Arthas pertencem a terceiros. Em comparação com os dois primeiros, as funções das ferramentas de terceiros serão cada vez mais poderosas

2,jConsole

jconsole é usado para monitorar a memória jvm, encadeamentos e classes, e é uma ferramenta de monitoramento de desempenho GUI baseada em JMX. Você pode encontrar este jconsole.exe no diretório bin no diretório de instalação do jdk e clicar duas vezes para iniciá-lo. Você também pode inserir jconsole diretamente no comando cmd para abrir esta ferramenta. A interface aberta é a seguinte

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-KTw6F8XE-1684390467232)(img/1684115452965.png)]

Existem três métodos de conexão do jconsole, que são conexão local local, conexão remota remota e conexão avançada.Se você usar conexão remota, precisará passar por um proxy JMX e definir o nome de usuário e a senha correspondentes para autorizar. O que precisa ser observado ao usar uma conexão local é que o usuário que inicia o código local e o usuário que inicia o jconsole devem ser o mesmo usuário.

Aqui, tomamos a conexão local como exemplo, basta executar um trecho de código e, em seguida, inserir jconsole na ferramenta de linha de comando cmd e, em seguida, encontrar o número do processo no processo local sem usar jps e clicar duas vezes em Neste processo, você pode encontrar o seguinte A interface, como pode ser visto na figura abaixo, nesta interface, o uso de memória heap, threads, classes e uso da CPU podem ser monitorados em tempo real.

insira a descrição da imagem aqui

Por exemplo, o status de monitoramento de sua memória é o seguinte, as informações de memória heap e memória não heap serão exibidas, e a memória heap será dividida em área Eden e área Survivor, e a memória será monitorada a cada segundo. O gráfico de linhas quebradas é o seguinte, representando a memória Atingir uma certa quantidade acionará um GC

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-Rg7fDaLj-1684390467234)(img/1684116612304.png)]

Ao mesmo tempo, o thread também é monitorado a cada segundo, e também há a função de monitoramento de deadlock e a GUI correspondente ao jstack

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-Dmnw1IAt-1684390467234)(img/1684116848651.png)]

E você pode saber o nome do coletor de lixo usado pela nova geração e pela geração antiga, o sistema operacional, o fornecedor jvm e outras informações através do resumo da VM

[A transferência da imagem do link externo falhou, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-LyuP0BeL-1684390467235)(img/1684116275018.png)]

3. Visual Vm (ênfase)

O Visual VM é uma poderosa ferramenta visual tudo-em-um para solução de problemas e monitoramento de desempenho. Ele integra várias ferramentas de linha de comando JDK. Ele pode exibir a configuração do processo da máquina virtual e informações do ambiente (jps, jinfo) e monitorar aplicativos. A CPU do programa, GC , heap, área de método e informações de encadeamento (jstack, jstat), etc., podem até mesmo substituir o uso de jConsole.

O Visual VM não é apenas poderoso por si só, mas também suporta a expansão de plug-ins, e a instalação de plug-ins também é muito conveniente. Confira este plug-in do Visual GC instalado anteriormente. Para abrir esta VM Visual, você só precisa encontrar o diretório bin no diretório de instalação jdk, encontrar esta VM JVisual e clicar duas vezes para abri-la.

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-HtW2OKQy-1684390467236)(img/1684137718101.png)]

É dividido principalmente em monitoramento remoto e monitoramento local. Monitoramento remoto não é considerado aqui por enquanto. É principalmente monitoramento local. Todos os processos jvm serão monitorados aqui.

Você pode clicar com o botão direito do mouse diretamente no processo para gerar um arquivo instantâneo do despejo de heap e um arquivo instantâneo do encadeamento. O arquivo instantâneo é semelhante a uma captura de tela naquele momento. Você pode visualizar informações de pilha, problemas de bloqueio, etc. visualizando este arquivo de instantâneo.

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-2swiJRS8-1684390467243)(img/1684199561538.png)]

Além da pilha, a CPU e a memória também podem ser analisadas e os instantâneos correspondentes também podem ser gerados.

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-osklAfcT-1684390467243)(img/1684199936450.png)]

4, JProfiler (forte)

Se você quiser testar o uso de memória durante a execução do java, precisará usar uma ferramenta de teste. Existe um plug-in MAT no Eclipse que pode ser testado, e também existe um plug-in na ideia, que é o JProfiler. Comparado com o Visual VM, o JProfiler é uma ferramenta relativamente mais poderosa, é uma ferramenta que não vem com o JDK, então você precisa pagar para usá-la.

O JProfiler possui funções poderosas e operação amigável. Tem pouco impacto no aplicativo analisado e possui funções de análise poderosas para CPU, Thread e Memória. Ele também suporta jdbc, nosql, jsp, serverlet, socket, etc., e também suporta local monitoramento e monitoramento operação remota.

Através deste JProfiler, você pode ter os seguintes benefícios:

  • Analisar o que o programa está fazendo nas chamadas de métodos e encontrar formas de melhorar seu desempenho;
  • Em termos de alocação de memória, os vazamentos de memória são corrigidos pela análise de objetos heap, cadeias de referência, etc., de modo a otimizar o uso da memória;
  • Em encadeamentos e bloqueios, mais visualizações relacionadas podem ser fornecidas para analisar e descobrir problemas multiencadeados;
  • No subsistema de alto nível, ele oferece suporte à análise integrada do subsistema de heap, como integrar JDBC e descobrir a instrução de execução mais lenta.

No nono artigo desta série, expliquei o tutorial de instalação deste JProfiler. Após instalar este plug-in, a ideia será exibida na ideia. https://blog.csdn.net/zhenghuishengq/article/details/130261481

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-QNpbln64-1684390467244)(img/1684217634865.png)]

Instalei a versão 11 aqui, e seu código de ativação é:S-J11-Everyone#553890-77gnvb3w8t9rd#4735

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-IIzNIfQ8-1684390467245)(img/1684218400742.png)]

Depois de instalar o plug-in do idea e a instalação local, você precisa integrar o idea nesta sessão e selecionar o idea instalado correspondente.

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-yBXhURUk-1684390467246)(img/1684219328195.png)]

Após a conclusão da instalação, clique no botão JProfiler, a seguinte interface aparecerá e o console imprimirá algumas coisas do JProfiler e, em seguida, clique em ok diretamente.

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-WEnDqnGR-1684390467246)(img/1684219916060.png)]

Em seguida aparecerá a seguinte tela, que irá monitorar o heap, CPU, thread, memória, número total de classes, ponto no tempo e número de GC em tempo real, etc.

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-ICnh54Gq-1684390467247)(img/1684220676401.png)]

Em seguida, simule o programa de impasse anterior

/**
 * @author zhenghuisheng
 * @date : 2023/5/12
 */
public class DeadBlockTest {
    
    
    public static void main(String[] args) {
    
    
        StringBuilder s1 = new StringBuilder();
        StringBuilder s2= new StringBuilder();
        new Thread(){
    
    
            @Override
            public void run() {
    
    
                synchronized (s1){
    
    
                    s1.append("a");
                    s1.append("b");
                    try {
    
    
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
    
    
                        e.printStackTrace();
                    }
                    synchronized (s2){
    
    
                        s2.append("c");
                        s2.append("d");
                    }
                }
            }
        }.start();

        new Thread(){
    
    
            @Override
            public void run() {
    
    
                synchronized (s2){
    
    
                    s1.append("a");
                    s1.append("b");
                    try {
    
    
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
    
    
                        e.printStackTrace();
                    }
                    synchronized (s1){
    
    
                        s2.append("c");
                        s2.append("d");
                    }
                }
            }
        }.start();
    }
}

O resultado é o seguinte, ele informará diretamente que existem dois impasses de thread (muito forte essa coisa)

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-U89wAquT-1684390467247)(img/1684221112359.png)]

Existem muitas funções nele, como visualizar vazamentos de memória por meio de gráficos e gráficos, etc., você pode instalar o JProfiler para testá-lo você mesmo.

5, Arthas

As ferramentas acima são suficientes para o desenvolvimento diário.A seguir, falaremos sobre o Arthas, uma ferramenta de desenvolvimento de código aberto da Ali. A ferramenta de modificação pode monitorar esses dados sem conexão remota ou configuração de parâmetros de monitoramento. Seus documentos oficiais são os seguintes: arthas.aliyun.com/zh-cn/

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-doShtNhl-1684390467248)(img/1684389172983.png)]

Os problemas que Arthas pode resolver são os seguintes:

  • De qual pacote jar a classe é carregada? Por que essa exceção é relatada? Ao encontrar problemas online, só pode adicionar logs para reiniciar?
  • Há um problema com o processamento de dados do usuário online, que não pode ser reproduzido offline, como resolvê-lo
  • Existe uma perspectiva global para ver a saúde do sistema
  • Existe alguma maneira de monitorar o status de execução em tempo real da JVM
  • Como localizar rapidamente pontos de acesso de aplicativos e gerar gráficos de chama

Seu método de instalação pode inserir diretamente este endereço no navegador: https://alibaba.github.io/arthas/arthas-boot.jar , aguarde um pouco para baixar o pacote jar e, em seguida, transfira o pacote jar baixado para o Linux em o servidor e, em seguida, java -jar arthas-boot.jarexecute diretamente

As instruções relevantes com base nos arthas são as seguintes:

help: 查看帮助的指令
cat:  打印文件内容,和linux中的目录一样
echo: 打印参数,和linux里的tee相似
pwd:  返回当前目录
session: 查看当前回话信息
history: 打印历史命令

As instruções relacionadas ao jvm são as seguintes:

dashboard:  当前系统的实时数据面板,可以加打印的总次数(-n)和间隔参数(-i)
thread:    查看当前JVM的线程堆栈信息
jvm:        查看当前JVM的信息
sysprop:   查看和修改JVM的系统属性
sysenv:    查看JVM的环境变量
getstatic: 查看类的静态属性
heapdump:  生成堆快照

Informações relacionadas a class e classLoader

sc:          查看JVM已加载类的信息、
sm:         查看已加载类的方法的信息
jad:        反编译已加载类的源码
mc:         .java编译成.class
redifine:   加载外部的.class文件
classloader:查看类的加载器信息

Informações relacionadas às instruções do método

monitor:     方法执行监控,如调用次数,执行时间,失败率等
watch:       方法执行数据监测,如异常,返回值,入参等
trace:      方法内部调用路径,输出方法上面每个结点的耗时
stack:      输出当前方法被调用的调用路径

6. Resumo

No desenvolvimento diário, como minha empresa usa um servidor windows online, a interface é relativamente amigável. Prefiro usar essa ferramenta JProfiler durante a operação do projeto para verificar problemas como deadlocks e vazamentos de memória. Claro que o Arthas é relativamente mais adequado. Usado em Servidores Linux.

Além dessas interfaces visuais, também estão disponíveis JMC, Flame Graphs, Btrace, YourKit, Jprobe, Spring Insight, etc.

Em suma, não existe a melhor ferramenta, apenas a ferramenta de desenvolvimento mais adequada para seu próprio uso. Dominar Jconsole, JVisual VM e JProfiler pode basicamente resolver muitos problemas.Se houver muitas doenças intratáveis ​​online, você pode dominar outro Arthas .

Acho que você gosta

Origin blog.csdn.net/zhenghuishengq/article/details/130745931
Recomendado
Clasificación