Eclipse JVM 调优

Eclipse JVM 调优

一、概述

jvm 调优就是根据 gc 日志分析 jvm 内存分配、回收的情况来调整各区域内存比例或者 gc 回收的策略;更深一层就是根据 dump 出来的内存结构和线程栈来分析代码中不合理的地方给予改进。eclipse 优化主要涉及的是前者,通过 gc 日志来分析。本文主要是通过分析 eclipse gc 日志为例来示例如何根据 gc 日志来分析 jvm 内存而进行调优,像根据关闭 eclipse 启动项、关闭各种校验等措施来优化 eclipse 本文不再阐述。

二、准备环境

eclipse 默认配置:eclipse.ini

-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.300.v20150602-1417
-clean
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms256m
-Xmx1024m

在配置的末尾处添加如下配置文件:

-XX:+PrintGCDetails   // 输出GC的详细日志            
-XX:+PrintGCDateStamps // 输出GC的时间戳(以日期的形式)
-Xloggc:gc.log  // 输出GC的详细日志

eclipse 启动计时插件:
http://www.chendd.cn/information/viewInformation/experienceShare/148.a
下载后解压放置在 eclipse 或 myeclipse 的安装目录下 dropins 目录下即可。
GChisto.jar:gc 日志分析工具 jar 包一个。
直接点击 gchisto.jar 就可以运行,点 add 载入 gc.log。

Visual GC: java 自带的内存监控工具,通过 visual gc 可以实时的监控到各个内存区域的变化。
Java VisualVM 默认没有安装 Visual GC 插件,需要手动安装,在 JDK 的安装目录的 bin 目录下双击 jvisualvm.exe,即可打开 Java VisualVM,在下面的启动界面中点击工具 -> 插件 -> 可用插件 ->Visual GC。


安装完成后重启 Java VisualVM,Visual GC 界面自动打开,即可看到 JVM 中堆内存的分代情况。

三、如何分析 GC 日志

摘录 GC 日志一部分(绿色为年轻代 gc 回收;蓝色为 full gc 回收):

2016-07-05T10:43:18.093+0800: 25.395: [GC [PSYoungGen: 274931K->10738K(274944K)] 371093K->147186K(450048K), 0.0668480 secs] [Times: user=0.17 sys=0.08, real=0.07 secs]
2016-07-05T10:43:18.160+0800: 25.462: [Full GC [PSYoungGen: 10738K->0K(274944K)] [ParOldGen: 136447K->140379K(302592K)] 147186K->140379K(577536K) [PSPermGen: 85411K->85376K(171008K)], 0.6763541 secs] [Times: user=1.75 sys=0.02, real=0.68 secs]

通过上面日志分析得出,PSYoungGen、ParOldGen、PSPermGen 属于 Parallel 收集器。其中 PSYoungGen 表示 gc 回收前后年轻代的内存变化;ParOldGen 表示 gc 回收前后老年代的内存变化;PSPermGen 表示 gc 回收前后永久区的内存变化。young gc 主要是针对年轻代进行内存回收比较频繁,耗时短;full gc 会对整个堆内存进行回城,耗时长,因此一般尽量减少 full gc 的次数。
通过两张图非常明显看出 gc 日志构成:
young gc 日志:

Full GC 日志:

四、启动调优

启动 eclipse 查看默认配置下启动时间大概是 70 秒左右。
根据 GChisto 分析 gc 日志看出来,启动过程中进行了 45 次 minor gc,没有进行 full gc;young gc 的时间差不多是 0.56 秒左右。

第一步优化:
为了避免内存频繁的动态扩展,直接把 -Xms 配置和 -Xmx 一致,修改如下:

-Xms1024m

修改完毕,重新启动:


启动时间缩小到 17 秒,分析 gc 日志得出 young gc10 次。
第二步优化:


至此优化结束,附最终的 eclipse.ini 文件:

-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.300.v20150602-1417
-clean
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms1024m
-Xmx1024m
-Xverify:none
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:gc.log

评论

暂无

添加新评论