JAVA内存分析:使用JDK自带工具进行内存和CPU分析及垃圾回收

JAVA内存分析:使用JDK自带工具进行内存和CPU分析及垃圾回收

JAVA内存分析一:基于dump内存溢出快照分析
JAVA内存分析二:idea集成jprofiler查看JVM内存使用情况
JAVA内存分析三:使用JDK自带工具进行内存和CPU分析及垃圾回收

引言

接我上两篇文章,使用jprofiler工具进行内存和cpu分析
JAVA内存分析:基于dump内存溢出快照分析
JAVA内存分析:idea集成jprofiler查看JVM内存使用情况
都是基于,需要下载jprofiler进行分析的,那么我们想简单点,能否使用JDK自带的工具进行分析了,本文,就基于采用JDK自带工具,jconsole.exe来进行内存和CPU的分析,以及使用自带的这个工具进行GC回收。

正文

操作步骤

1,运行本地程序做分析示例
2,运行jconsole.exe
3,对JVM使用内存,CPU的情况进行查看
4,对运行的程序发送数据,模拟数据处理
5,使用自带的工具,进行GC回收

1.运行程序

还是之前两篇文章里面的代码示例,将服务端程序运行起来,这里运行的程序,依然是rabbitMQ监听的消费者程序,大家也可以自己搭建一个springBoot,SpringMVC程序,并提供一个Controller接口左右请求数据,观察内存使用情况的入口。

package com.cdzg.rabbit.rabbitmqprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RabbitmqProviderApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(RabbitmqProviderApplication.class, args);
    }

}

2,打开jconsole.exe工具

我的JDK安装在D盘的java目录下面
那么我们先进入到D:\java\jdk1.8.0_211\bin这个目录下面
运行程序的位置
从图中我们可以找到我们即将要运行的jconsole.exe程序,而它的大小了,只有17KB,这其实是不科学的,一个17KB的运行程序是何德何能可以做UI界面化的监控。
它的背后,实际做支撑的是:如图所示tool.jar的这个jar包。
实际依赖的jar

3.运行jconsole.exe

现在我们将exe,run起来
运行后的界面

从图中,我们就可以看见,我在本地的idea上运行的程序,现在我们选中,并点击连接。
即出现如下界面
运行后界面
这个界面是我程序运行5分钟后的截图,从这个工具上面,我们就可以对我们的内存、CPU、线程等使用情况进行分析。

4,这里我们还是发送1000条消息,将程序run起来

package com.cdzg.rabbit.rabbitmqconsumer;

import com.cdzg.rabbit.rabbitmqconsumer.mq.RabbitConfig;
import com.cdzg.rabbit.rabbitmqconsumer.service.TestSendDlxProducer;
import com.cdzg.rabbit.rabbitmqconsumer.service.TestSendProducer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class RabbitmqConsumerApplicationTests {
    
    

    @Autowired
    private TestSendProducer testSendProducer;
    @Autowired
    private TestSendDlxProducer testSendDlxProducer;

    @Test
    void contextLoads() {
    
    
    }

    @Test
    public void testSend() throws InterruptedException {
    
    
        for (int i = 0; i < 1000; i++) {
    
    
            testSendProducer.sendMsg("你好,打工人!" + i);
        }
        Thread.sleep(2000);
    }

    @Test
    public void testSendMore() throws InterruptedException {
    
    
        testSendProducer.sendMsg(RabbitConfig.CDZG_MOONL_MORE_EXCHANGE, RabbitConfig.CDZG_MOONL_MORE_ROUTINGKEY, "多队列,你好,打工人!");
        Thread.sleep(2000);
    }

    @Test
    public void testSendDlx() throws InterruptedException {
    
    
        for (int i = 0; i < 3; i++) {
    
    
            testSendDlxProducer.sendDlxMsg("延时你好,打工人!" + i, "3000");

        }
        Thread.sleep(2000);
    }
}

运行后的结果
从上图中,我们可以看到,CPU的占用从0.2%飙升到了1%,其它的指标,都是在提升。

5,使用工具自带的GC回收功能

GC回收执行前
GC回收执行前

在这里插入图片描述
GC回收执行后,可以明显的看到内存从100多Mb下降到了20多Mb

后记

在此我们就完成了,使用JDK自带的工具,jConsole对JVM内存、CPU、线程等使用情况进行查询和回收。
在我们实际的开发过程当中,如果要进行JVM调优的话,可以参考使用这种方式,进行对内存、CPU、线程等的分析

希望大家给个关注

在这里插入图片描述
关注下我的个人公众号,可以获取更多的资讯

公众号中,分享我同事如何吊打面试官系列文章,干货满满

猜你喜欢

转载自blog.csdn.net/liaoyue11/article/details/110875466