如何监控JVM的垃圾回收

在Spring Boot项目里,可借助创建大量对象来触发GC,再运用工具监控GC时间并可视化展示。以下为具体步骤:

1. 创建Spring Boot项目

首先,你可以使用Spring Initializr(start.spring.io/ )创建一个基本的Spring Boot项目,添加Spring Web依赖。

2. 编写代码触发GC

src/main/java目录下创建一个新的类,代码如下:

java 复制代码
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class GCTrigger implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        List<Object> list = new ArrayList<>();
        while (true) {
            list.add(new byte[1024 * 1024]); // 每次添加1MB的对象
            if (list.size() % 10 == 0) {
                System.gc(); // 手动触发GC
            }
        }
    }
}

在上述代码中,借助一个无限循环持续创建byte数组对象,并且每添加10个对象就手动触发一次GC。

3. 运行项目

启动Spring Boot项目,让代码开始运行。

4. 监控GC时间

你可以使用以下工具来监控GC时间:

VisualVM

VisualVM是一款功能强大的可视化监控工具,可用来监控Java应用程序的性能。

  • 安装 :如果你使用的是JDK 8及以前的版本,VisualVM通常会随JDK一同安装。要是使用JDK 9及以后的版本,你可以从VisualVM的官方网站(visualvm.github.io/ )下载并安装。
  • 监控:打开VisualVM,在左侧列表中找到你运行的Spring Boot项目,点击进入监控界面。在"监视"选项卡中,你能看到堆内存、非堆内存、线程等信息;在"垃圾回收"选项卡中,你可以看到GC的详细信息,如GC时间、GC次数等。

Java Mission Control (JMC)

Java Mission Control是Oracle提供的一款专业的性能监控和故障诊断工具。

  • 安装:如果你使用的是Oracle JDK,JMC通常会随JDK一起安装。要是使用OpenJDK,你可以从Oracle官方网站下载JMC。
  • 监控:打开JMC,连接到你运行的Spring Boot项目。在"飞行记录器"中,你可以创建一个新的记录,包含GC相关的事件。记录完成后,你可以分析GC事件的详细信息,包括GC时间、GC原因等。

5. 配置GC日志

除了使用可视化工具,你还可以通过配置GC日志来记录GC信息。在application.properties文件中添加以下配置:

properties 复制代码
java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log

上述配置会将GC信息记录到gc.log文件中,你可以使用工具(如GCViewer)来分析这些日志文件。

总结

通过以上步骤,你可以在Spring Boot项目中触发GC,并使用可视化工具监控GC时间。这有助于你了解应用程序的内存使用情况和GC性能。

相关推荐
记得开心一点嘛1 小时前
Redis封装类
java·redis
lkbhua莱克瓦241 小时前
进阶-存储过程3-存储函数
java·数据库·sql·mysql·数据库优化·视图
计算机程序设计小李同学1 小时前
基于SSM框架的动画制作及分享网站设计
java·前端·后端·学习·ssm
鱼跃鹰飞1 小时前
JMM 三大特性(原子性 / 可见性 / 有序性)面试精简版
java·jvm·面试
该怎么办呢2 小时前
基于cesium的三维不动产登记系统的设计与实现(毕业设计)
java·毕业设计
J不A秃V头A2 小时前
多任务执行时,共享请求对象被并发修改
java
heartbeat..2 小时前
零基础学 SQL:DQL/DML/DDL/DCL 核心知识点汇总(附带连接云服务器数据库教程)
java·服务器·数据库·sql
专注于大数据技术栈3 小时前
java学习--LinkedHashSet
java·开发语言·学习
阿湯哥3 小时前
Spring AI Alibaba 实现 Workflow 全指南
java·人工智能·spring
旺仔小拳头..4 小时前
Java ---变量、常量、类型转换、默认值、重载、标识符、输入输出、访问修饰符、泛型、迭代器
java·开发语言·python