`
crukor
  • 浏览: 31604 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

jvm参数实战:VisualVM工具对Eclipse性能调优

阅读更多

一、VisualVM简介

VisualVM 是一个功能强大的JVM运行监视和故障处理工具,自从 JDK 6 Update 7 以后已经作为 Oracle JDK 的一部分,位于 JDK 根目录的 bin 文件夹下。其性能分析功能甚至比起JProfilerYourKit等专业且收费的工具都不会逊色多少。而且VisualVM还有一个很大的优点:不需要被监视的程序基于特殊Agent运行,因此它对应用程序的实际性能影响很小,使得它可以直接应用于生产环境中。这个优点是JProfilerYourKit等工具无法与之媲美的。

 

使用之前可以根据需要下载安装合适的插件

1VisualVM 插件中心安装:

主菜单中选择“工具”>“插件”。在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装”。

2、手动安装:主菜单中选择“工具”>“插件”,在“已下载”标签中,点击"添加插件"按钮,选择已下载的插件文件 (.nbm) 并打开。

插件下载地址https://visualvm.java.net/pluginscenters.html

 

VisualVM详细使用可参考http://www.ibm.com/developerworks/cn/java/j-lo-visualvm/

 

二、Eclipse调优

 

1、未调整以前分析

Eclipse.ini中关于JVM参数的原始配置如下:

--launcher.XXMaxPermSize

256m

-Xms40m

-Xmx256m

 

EclipseStartTime_1.0.0.201011281102.jar(见附件)放到plugins目录下,可以显示Eclipse启动耗时,如下图所示:



图二.1 Eclipse耗时统计插件显示

 



图二.2 VisualVM GC 情况

 

未优化以前Eclipse启动分析如下:

整个启动过程平均耗时约13秒。

垃圾收集总耗时3.177秒 ,其中

Full GC被触发了12次,耗时2.942秒;

Minor GC触发36次,耗时0.235秒。

加载类9663个,共耗时11.229秒

虚拟机256MB( -Xmx256m)堆内存分配170.688MB给老年代(Old Gen),85.312MB给新生代(68.312MB给Eden,两个Surviver分别为8.5MB)。

 

 

2、参数调整分析

    新生代Minor GC频繁,是由于虚拟机分配给新生代的空间太小而导致的,有必要使用-Xmn参数调整。

12次的Full GC大约耗时3秒,占了大部分的GC时间,降低GC时间的主要目标就是降低这部分时间。通过查看GC日志分析(-XX:+PrintGCDetails 打印GC详细信息 -Xloggc:mygc.log 位于eclipse.exe同目录下)

7.487: [Full GC 7.487: [Tenured: 18826K->20090K(27328K), 0.1591992 secs] 22161K->20090K(39680K), [Perm : 20479K->20479K(20480K)], 0.1593305 secs] [Times: user=0.16 sys=0.00, real=0.16 secs] 

 

8.532: [Full GC 8.532: [Tenured: 20781K->23470K(33484K), 0.1794857 secs] 31767K->23470K(48588K), [Perm : 24575K->24575K(24576K)], 0.1796180 secs] [Times: user=0.19 sys=0.00, real=0.19 secs] 

 

9.280: [Full GC 9.280: [Tenured: 23470K->25873K(39120K), 0.2306239 secs] 30999K->25873K(56784K), [Perm : 28671K->28651K(28672K)], 0.2307639 secs] [Times: user=0.25 sys=0.00, real=0.25 secs] 

 

10.717: [Full GC 10.717: [Tenured: 26054K->28920K(43124K), 0.2285320 secs] 33607K->28920K(62644K), [Perm : 32767K->32767K(32768K)], 0.2286774 secs] [Times: user=0.22 sys=0.02, real=0.23 secs] 

 

    括号中的红色数字代表老年代容量,这组GC 日志显示是老年代的空间耗尽,每发生一次Full GC都伴随着一次老年代空间扩容:27328K-> 33484K-> 39120K->43124K

通过分析可知:Eclipse启动时的Full GC 大多数是由于老年代扩容导致的,由永久代(Perm )扩容导致的也有一部分。为了避免这些扩容所带来的性能浪费,可以把-Xms-XX:PermSize参数分别设置为-Xmx-XX:PermSizeMax参数值,强迫虚拟机在启动的时候就把老年代和永久代容量固定下来,避免运行时自动扩展。

 

eclipse.ini jvm参数为

-Xmx512m

-Xms512m

-Xmn256m

-XX:PermSize=96m

-XX:MaxPermSize=96m

 

使用这个配置之后GC次数已经大幅降低,启动时间变为10秒左右。


  

 

3、其他

在有些情况下,Old Gen曲线一直平滑,但还是发生Full GC

此时用 jstat -gccause 进程号 命令查询一下最近一次GC的原因。有可能是代码调用了System.gc(),显式触发了GC。在内存设置调整后,这种GC不符合我们的期望。因此在eclipse.ini中加入-XX:+DisableExplicitGC参数屏蔽掉System.gc()

C:\Documents and Settings\Administrator>jps

2016 Jps

10008

C:\Documents and Settings\Administrator>jstat -gccause 10008

  S0     S1     E      O      P     YGC   YGCT   FGC  FGCT   GCT    LGCC       GCC

  0.00   0.00  29.19  13.70  41.11   4    0.328    1  0.408  0.735  System.gc()  No GC

 

 

  • 大小: 7.3 KB
  • 大小: 22.7 KB
  • 大小: 18 KB
分享到:
评论

相关推荐

    JVM实战-JVM调优案例分析与MyEclipse性能调优实战

    ### JVM实战-JVM调优案例分析与MyEclipse性能调优实战 #### 实验背景与目标 在现代软件开发过程中,提升开发效率是至关重要的环节之一。MyEclipse和Eclipse作为主流的集成开发环境(IDE),被广泛应用于Java项目的...

    Java虚拟机

    5.3 实战:Eclipse运行速度调优 5.3.1 调优前的程序运行状态 5.3.2 升级JDK 1.6的性能变化及兼容问题 5.3.3 编译时间和类加载时间的优化 5.3.4 调整内存设置控制垃圾收集频率 5.3.5 选择收集器降低延迟 5.4 ...

    Java底层知识点、源码解读,技术栈相关原理知识点、工具解读最佳实践、功能点实战,问题排查,开发技巧等.zip

    工具解读最佳实践涵盖开发工具(如IDEA、Eclipse)、构建工具(Maven、Gradle)、版本控制(Git)、持续集成/持续部署(CI/CD)工具(Jenkins、Travis CI)等的使用。熟练掌握这些工具能提高开发效率,确保代码质量...

    java学习路线.docx

    #### 十一、JVM 和性能调优 1. **JVM 知识**: - **内存区域**:了解堆、栈、方法区等内存区域。 - **垃圾回收**:GC 机制的理解,如 CMS 和 G1 收集器。 2. **性能调优**: - **工具使用**:VisualVM、...

    Java宝典大全

    - **JVM参数及调优**: 为了优化JVM性能,开发者可以调整一系列参数,比如初始堆大小(-Xms)、最大堆大小(-Xmx)、年轻代大小(-Xmn)等。此外,还可以通过设置GC日志输出来监控GC行为。 - **Java工具**: Java提供了多种...

    java面试基础

    最后,面试者还应关注一些实际项目经验,如如何处理高并发场景,数据库优化,微服务架构,以及如何利用工具进行性能分析和问题定位,如使用JProfiler或VisualVM进行性能监控。 总的来说,Java面试基础涵盖了广泛的...

    java编程软件合集

    8. **性能分析和调优工具**: 如JProfiler和VisualVM,它们可以帮助开发者找出代码中的性能瓶颈,进行内存和CPU使用情况的监控和分析。 9. **数据库工具**: 如MySQL Workbench、Oracle SQL Developer,用于数据库的...

    java常见问题 .

    - 使用工具如JProfiler、VisualVM等进行性能监控和分析。 #### 13. 安全性 - 采用安全的编码实践,避免SQL注入、XSS攻击等常见的安全漏洞。 - 使用加密算法保护敏感信息。 以上仅为Java部分知识点的概览,实际上...

Global site tag (gtag.js) - Google Analytics