JVM:可视化 JVM 故障处理工具( 四 )
在主信息面板 , 可以看到 IDEA 所使用 JVM 的版本信息 , 可以看到具体的 JAVA_HOME 路径 , 还可以看到具体的 JVM 参数 , 这里可以看到 IDEA 启动时设置的默认最小堆和最大堆内存的设置分别是 128MB 和 750 MB, 所使用的垃圾回收器则是 CMS 收集器 。
然后点击 Visual GC , 可以看到:
文章插图
【JVM:可视化 JVM 故障处理工具】在启动过程中 ,Class 加载消耗了 28s 左右 , 而 Class 编译则消耗了 35s。 并且在这个过程中 ,Minor GC 被触发了 149 次 , 消耗只有 713ms, 我们更加关注的 Full GC 更是一次都没有触发 , 消耗为 0。
因为 IDEA 默认使用的是 CMS 收集器 , 如果我们换成 G1 收集器会不会更快一些呢?
首先 , 找到 IDEA 的配置文件 , 我的 IDEA 是通过 Toolbox 进行安装的 , 所以我的 IDEA 的配置文件的路径有点奇怪 D:\Program Files\JetBrains\apps\IDEA-U\ch-0\202.7660.26.vmoptions。
先把这个文件备份到桌面一个 , 防止改坏了导致 IDEA 不能使用 。
删掉现有的垃圾回收器配置 -XX:+UseConcMarkSweepGC, 增加 G1 收集器的配置:
-XX:+UseG1GC
其余的配置不做修改 , 直接关闭 IDEA 重启 , 再看下 GC 情况 。
首先先看下主面板 , 看下我们的 GC 收集器是否已经切换成功:
文章插图
然后再看下 GC 面板:
文章插图
Minor GC 竟然被触发了 271 次 , 而且消耗达到了 853ms, 好吧 , 看来在客户端还是更适合使用 CMS 做为垃圾回收器 。
我们再修改下 -Xmx 这个配置 , 将配置的大小缩减为现在的一半 , 再把 GC 换回原有的 CMS, 看下 Full GC 的情况:
文章插图
可以看到 ,Full GC 整整发生了 46 次 , 并且耗时超过了 21s, 而且这是 IDEA 的界面上也开始弹出警告 , 警告我们内存不足了 , 需要调整 。
文章插图
吓得我赶紧改回了原有配置 , 顺便把 -Xmx 的大小加到了 1024, 尽量减少 Full GC 的情况 。
4. Java Mission ControlJMC 同样在 JDK/bin 这个目录下 , 双击 jmc.exe 即可运行 。
文章插图
打开后在 JVM 浏览器面板中有两个选项 , 一个是 MBean, 一个是 JFR 飞行记录器 。
关于 MBean 这部分数据 , 与 JConsole 和 VisualVM 上取到的内容是一样的 , 只是展示形式上有些差别 , 就不多说了 。
双击「飞行记录器」 , 将会出现「飞行记录器」窗口(如果第一次使用 , 还会收到解锁商业功能的警告窗) 。
文章插图
注意:在使用前需要在 JVM 中增加如下两个参数 , 含义是解锁 JFR 功能的锁定 。
-XX:+UnlockCommercialFeatures-XX:+FlightRecorder
文章插图
飞行记录报告里包含以下几类信息: