前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDK常用自带工具 & IDEA 插件:VisualGC

JDK常用自带工具 & IDEA 插件:VisualGC

作者头像
收心
发布2022-01-19 15:23:31
1.7K0
发布2022-01-19 15:23:31
举报
文章被收录于专栏:Java实战博客Java实战博客

JDK 自带了很多常用工具方面我们进行一些性能监控与调试

在Windows工具都在我们JDK的bin目标下,Linux依旧有相关的命令

JVM工具可按照使用形式进行分类

  • 命令行工具
    • jps
    • jstat
    • jinfo
  • 可视化工具

命令行工具

jps:JVM Process Status Tool 列出正在运行的虚拟机进程

代码语言:javascript
复制
jps [options] [hostid]

[options]:
-q:显示进程ID
-m:显示进程ID、主类名称、传入Main方法的命令行参数
-l:显示进程ID、主类全限定名(快速得知是什么项目)
-v:显示进程ID、主类名称、JVM参数
-V:显示进程ID、主类名称 (-V 等价于 默认不加options 的 jps)

options之间可以任意组合

[hostid]
hostname:port 例如:127.0.0.1:8080

jstat:JVM Statistics Monitoring Tool 监视虚拟机各种的运行状态信息( 类装载、内存、垃圾手机、JIT编译等)

代码语言:javascript
复制
jstat [options] [vmid] [interval] [count]

[options] 可以通过jstat -options 查看所有的options
-class:显示类加载的统计信息
-compiler:Java HotSpot VM 及时编译器统计信息
-gc:显示有关垃圾收集堆行为的统计信息
-gcutil:显示有关垃圾收集堆行为的统计信息的百分比
....

-class 

[vmid]
虚拟机进程ID  (可通过jps -l获得)  如果远程的虚拟机就需要 进程ID@IP:端口

[interval](可不穿,但是如果传递了count,建议传递采样间隔!)
采样间隔(默认单位是毫秒),单位可选秒或者毫秒(需要手动添加单位 如 30s就是30秒,300ms就是300毫秒)

[count](可不穿)
采样一共循环的次数

Loaded 类加载数、Bytes 加载的Kb数、Unloaded卸载类数、Bytes 卸载的Kb数、Time 执行类加载和卸载操作的时间

Compiled 执行编译的任务数、Failed 编译失败任务数、Invaild 无效的编译任务数、Time 执行的时间、FailedType 上次失败的编译类型、FailedMethod 上次失败的编译类名与方法

S0C与S1C分别是幸存区0与1的内存总容量、S0U与S1U 分别是幸存区0与1的内存使用情况、EC与EU表示eden区内存总容量与使用、OC与OU表示老年代总用量与使用情况、MC与MU表示原空间总用量与使用情况、CCSC与CCSU:压缩类空间容量,类压缩空间的使用情况、YGC与YGCT表示Young GC执行次数与与时间、FGC与FGCT:Full GC执行的次数与时间、GCT:总垃圾收集时间

S0与S1表示幸存区0与1内存使用占比、E与O与M依次表示Eden与老年代与元空间的内存使用占比、CCS表示类空间压缩使用内存占比、 YGC与YGCT表示Young GC执行次数与与时间、 FGC与FGCT:Full GC执行的次数与时间、GCT:总垃圾收集时间

jstat 查看堆内存 实验案例

其他方式:https://www.zanglikun.com/481.html#Heap_Memory

代码语言:javascript
复制
    //-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -verbose:gc
    public static void main(String[] args) throws IOException {

        final int OneMB = 1024*1024;
        Byte[] b1 = new Byte[2*OneMB];
        System.out.println("JVM 已经使用2M 回车执行下一步");
        System.in.read();

        Byte[] b2= new Byte[2*OneMB];
        System.out.println("JVM 已经使用4M 回车继续执行下一步");
        System.in.read();

        Byte[] b3= new Byte[2*OneMB];
        System.out.println("JVM 已经使用6M 再次回车结束");
        System.in.read();

    }

下面是运行结果:

代码语言:javascript
复制
jstat -gc PID

# 查看GC使用百分比
jstat -gcutil PID

这是我使用Idea插件 VisualGC 记录的,放在这里方便理解jstat的使用

我们从图中可以清晰看出来,在b3 数组 new 出来之前,内存已经不容许new 出来之后的,所以 JVM 执行了一次GC。

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JVM工具可按照使用形式进行分类
  • 命令行工具
    • jps:JVM Process Status Tool 列出正在运行的虚拟机进程
      • jstat:JVM Statistics Monitoring Tool 监视虚拟机各种的运行状态信息( 类装载、内存、垃圾手机、JIT编译等)
        • jstat 查看堆内存 实验案例
          • 其他方式:https://www.zanglikun.com/481.html#Heap_Memory
          相关产品与服务
          命令行工具
          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档