`
gaozzsoft
  • 浏览: 427138 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

一次Java垃圾收集调优实战

    博客分类:
  • JVM
阅读更多

1. 资料

2. GC日志打印

  GC调优是个很实验很伽利略的活儿,GC日志是先决的数据参考和最终验证:

Java代码 复制代码
  1. -XX:+PrintGCDetails    
  2. -XX:+PrintGCTimeStamps(GC发生的时间)    
  3. -XX:+PrintGCApplicationStoppedTime(GC消耗了多少时间)    
  4. -XX:+PrintGCApplicationConcurrentTime(GC之间运行了多少时间)  
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps(GC发生的时间) 
-XX:+PrintGCApplicationStoppedTime(GC消耗了多少时间) 
-XX:+PrintGCApplicationConcurrentTime(GC之间运行了多少时间)

 

3. 收集器选择

CMS收集器:暂停时间优先

   配置参数:-XX:+UseConcMarkSweepGC
   已默认无需配置的参数:-XX:+UseParNewGC(Parallel收集新生代) -XX:+CMSPermGenSweepingEnabled(CMS收集持久代) -XX:UseCMSCompactAtFullCollection(full gc时压缩年老代)

   初始效果:1g堆内存的新生代约60m,minor gc(由新代到老代回收)约5-20毫秒,full gc约130毫秒。

Parallel收集器:吞吐量优先

    配置参数: -XX:+UseParallelGC -XX:+UseParallelOldGC(Parallel收集年老代,从JDK6.0开始支持)

    已默认无需配置的参数: -XX:+UseAdaptiveSizePolicy(动态调整新生代大小)

    初始效果:1g堆内存的新生代约90-110m(动态调整),minor gc约5-20毫秒,full gc有无UseParallelOldGC 参数分别为1.3/1.1秒,差别不大。

    另外-XX:MaxGCPauseMillis=100 设置minor gc的期望最大时间,JVM会以此来调整新生代的大小,但在此测试环境中对象死的太快,此参数作用不大。

 

4. 调优实战

      Parallel收集高达1秒的暂停时间基本不可忍受,所以选择CMS收集器。

      在被压测的Mule 2.0应用里,每秒都有大约400M的海量短命对象产生:

  1. 因为默认60M的新生代太小了,频繁发生minor gc,大约0.2秒就进行一次。
  2. 因为CMS收集器中MaxTenuringThreshold(生代对象撑过过多少次minor gc才进入年老代的设置)默认0,存活的临时对象不经过Survivor区直接进入年老代,不久就占满年老代发生full gc。

     对这两个参数的调优,既要改善上面两种情况,又要避免新生代过大,复制次数过多造成minor gc的暂停时间过长。

  1. 使用-Xmn调到1/3 总内存。观察后设置-Xmn500M,新生代实际约460m。(用-XX:NewRatio设置无效,只能用 -Xmn)。
  2. 添加-XX:+PrintTenuringDistribution 参数观察各个Age的对象总大小,观察后设置-XX:MaxTenuringThreshold=5。

      优化后,大约1.1秒才发生一次minor gc,且速度依然保持在15-20ms之间。同时年老代的增长速度大大减缓,很久才发生一次full gc,

      参数定稿:

Java代码 复制代码
  1. -server -Xms1024m -Xmx1024m    
  2. -Xmn500m    
  3. -XX:+UseConcMarkSweepGC     
  4. -XX:MaxTenuringThreshold=5     
  5. -XX:+ExplicitGCInvokesConcurrent  
-server -Xms1024m -Xmx1024m 
-Xmn500m 
-XX:+UseConcMarkSweepGC  
-XX:MaxTenuringThreshold=5  
-XX:+ExplicitGCInvokesConcurrent

 

      最后服务处理速度从1180 tps 上升到1380 tps,调整两个参数提升17%的性能还是笔很划算的买卖。

 

     另外,JDK6 Update 7自带了一个VisualVM工具,内里就是之前也有用过的Netbean Profiler,类似JConsole一样使用,可以看到线程状态,内存中对象以及方法的CPU时间等调优重要参考依据。免费捆绑啊,Sun 这样搞法,其他做Profiler的公司要关门了。

<script type="text/javascript"></script><script src="http://a.alimama.cn/inf.js" type="text/javascript"></script>
分享到:
评论

相关推荐

    阿里巴巴Java性能调优实战(2021华山版).rar

    《阿里巴巴Java性能调优实战(2021华山版)》是一本专注于Java应用程序性能优化的专业书籍,由阿里巴巴的技术专家团队倾力打造。这本书基于阿里巴巴的实际业务场景,结合丰富的实践经验,为Java开发者提供了深入、...

    Java垃圾回收调优实战

    Java垃圾回收调优是优化Java应用程序性能的...总之,Java垃圾回收调优是一个迭代的过程,需要结合理论知识、实践经验以及有效的工具来不断优化。理解GC的工作原理,结合实际应用的性能需求,才能实现最佳的调优效果。

    jvm调优实战经验

    - **青年代(Young Generation)**:大部分对象在这里创建并快速死亡,经历一次或几次Minor GC后,存活对象晋升至老年代。 - **老年代(Old Generation)**:长期存活的对象,经历了多次Minor GC后,它们被移动...

    47-Java性能调优实战.zip

    综上所述,"47-Java性能调优实战"课程是一个全面的Java性能优化学习资源,它涵盖了从代码编写到JVM配置,再到数据库优化的各个层面,旨在帮助开发者提升程序性能,实现更高效、更稳定的Java应用。通过学习和实践,...

    JVM调优实战.doc

    《JVM调优实战》是一份深入探讨Java虚拟机(JVM)性能优化的文档,主要分为理论篇和实战篇两大部分。本文将详细解析其中的关键知识点。 理论篇首先介绍了JVM内存模型,将其比喻为一个多功能的养鱼塘。在这个比喻中...

    个人总结之—JVM性能调优实战

    ### 个人总结之—JVM性能调优实战 #### 概述 本文档是一篇关于JVM(Java虚拟机)性能调优的经典实战总结。在实际应用开发与维护过程中,JVM性能调优是一个非常重要的话题,它直接关系到应用程序运行效率、资源利用...

    Java 工程性能调优教程

    深入解析JVM的工作原理,包括垃圾收集器的选择与调优,内存分配策略,类加载机制,以及如何利用JMX和各种监控工具(如VisualVM)进行性能分析和调整。 5. **模块五:设计模式调优**(6讲): 探讨常见设计模式在...

    JVM入门到JVM 调优实战

    总结来说,从JVM入门到实战调优,涉及了Java程序从编译到执行的全过程,包括Class文件格式、类加载、内存模型、运行时数据区、垃圾收集策略以及调优实践等多个层面。深入理解和掌握这些知识,不仅有助于提升Java程序...

    Java高并发编程与JVM性能调优实战 视频教程 下载下载因为太大存百度云盘4.zip

    《Java高并发编程与JVM性能调优实战》是一门深度探讨Java开发中高并发处理和JVM优化的视频教程。课程旨在帮助开发者提升在大规模并发环境下的编程能力,同时掌握JVM内部机制,实现高效的系统性能优化。通过学习本...

    Java垃圾收集处理方法

    Java垃圾收集处理方法是Java语言中一个非常重要的概念。垃圾收集(Garbage Collection)是Java虚拟机(JVM)中的一种机制,负责自动回收不再使用的内存,避免内存泄漏和溢出。 Java垃圾收集处理方法可以分为两大类...

    Java高并发编程与JVM性能调优实战 视频教程 下载下载因为太大存百度云盘1.zip

    课程中提供的"Java高并发编程与JVM性能调优实战 视频教程 下载下载因为太大存百度云盘1.txt"可能是一个文本文件,包含了获取或解压视频教程的详细步骤,或者是课程大纲或相关资源链接。为了充分利用这门课程,学习者...

    Tomcat性能调优实战总结

    【Tomcat性能调优实战总结】 Tomcat性能调优是一个涉及多方面技术的复杂过程,主要包括对外部环境的调整和Tomcat自身配置的优化。在实际应用中,我们需要通过压力测试来评估系统的性能表现,然后根据测试结果进行...

    Weblogic+性能调优实战

    《Weblogic性能调优实战》一书主要针对的是在企业级应用环境中,如何有效地管理和优化Weblogic服务器的性能。Weblogic是由Oracle公司提供的一个强大的Java EE应用服务器,它为企业提供了全面的中间件服务,用于构建...

    Java垃圾收集必备手册.pdf

    本文档是一本关于Java垃圾收集的教程,主要涉及了垃圾收集的概念、算法以及调优技巧。垃圾收集是Java内存管理的一个重要方面,它能够自动回收堆内存中不再使用的对象,减少内存泄漏的风险。本手册提供了一个全面的...

    Java高并发编程与JVM性能调优实战 视频教程 下载下载因为太大存百度云盘3.zip

    《Java高并发编程与JVM性能调优实战》是一门深度探讨Java开发中高并发处理和JVM优化的视频教程。课程旨在帮助开发者提升在大规模并发环境下的编程能力,同时掌握JVM(Java虚拟机)的性能调优技巧,以确保应用程序的...

    java诊断与调优常用命令jmap、jstack、jstat使用实战.pdf

    Java诊断与调优是开发和运维人员日常工作中不可或缺的一部分,尤其是在生产环境中,遇到问题时能够快速定位并优化显得尤为重要。本文主要介绍了四个Java命令行工具:jps、jmap、jstack和jstat,它们是Java性能分析和...

    Java垃圾收集必备手册

    Java垃圾收集机制的深入理解和调优对于构建高性能、稳定的Java应用至关重要。了解不同垃圾收集算法的原理和特点,合理使用JVM提供的工具和参数进行调整,是每位Java开发者都需要掌握的技能。此外,由于不同版本的JVM...

    实用:多场景JVM参数调优实战.docx

    `UseAdaptiveSizePolicy` 是一种自动调整策略,它会根据应用的运行情况动态调整新生代的大小,以达到设定的最大垃圾收集暂停时间和吞吐量目标。`-XX:MaxGCPauseMillis` 参数用于设置期望的最大垃圾收集暂停时间,...

    Java高并发编程与JVM性能调优实战 视频教程 下载下载因为太大存百度云盘2.zip

    《Java高并发编程与JVM性能调优实战》是一门深度探讨Java开发中高并发处理和JVM优化的视频教程。课程旨在帮助开发者提升在大规模并发环境下的编程能力,同时掌握JVM性能优化技巧,以实现更高效、稳定的Java应用程序...

Global site tag (gtag.js) - Google Analytics