`
lvwenwen
  • 浏览: 953890 次
  • 性别: 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之间运行了多少时间)  

 

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  

 

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

 

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

分享到:
评论

相关推荐

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

    阿里巴巴Java性能调优实战(2021华山版) 本资源摘要信息来自阿里巴巴Java性能调优实战(2021华山版),旨在帮助Java开发者掌握性能调优的实战经验和技术。 性能调优的重要性 性能调优是软件开发中一个非常重要的...

    78-Java性能调优实战.zip

    78-Java性能调优实战.zip78-Java性能调优实战.zip78-Java性能调优实战.zip78-Java性能调优实战.zip78-Java性能调优实战.zip78-Java性能调优实战.zip78-Java性能调优实战.zip78-Java性能调优实战.zip78-Java性能调优...

    阿里+Java+开发手册、阿里巴巴Java性能调优实战

    《阿里+Java+开发手册、阿里巴巴Java性能调优实战》是两本专注于Java开发和性能优化的专业书籍,分别以嵩山版和华山版的形式呈现,由阿里巴巴集团编写。这两本书籍结合了阿里巴巴在实际业务场景中的丰富经验,旨在...

    47-Java性能调优实战.zip

    本专题“47-Java性能调优实战”聚焦于电商系统的分布式事务处理,旨在帮助开发者掌握如何有效地解决内存持续上升的问题以及优化网络通信和NIO实现。 首先,内存持续上升是Java应用中常见的性能问题,可能导致系统...

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

    本资源提供了一份阿里巴巴Java性能调优实战指南,旨在帮助Java开发者提高系统性能。该指南共分七大模块,每个模块都涵盖了Java应用服务的不同方面的性能优化。 第一个模块概述了性能调优的重要性,并为开发者提供了...

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

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

    Tomcat中Java垃圾收集调优宣贯.pdf

    Java垃圾收集调优是优化Tomcat性能的关键环节,主要涉及JVM内存管理和垃圾收集机制。在Tomcat中,我们可以通过调整JVM参数来优化内存分配和垃圾收集行为,以提高应用的响应速度和稳定性。 首先,JVM内存分为三个...

    Tomcat中Java垃圾收集调优[文].pdf

    以下是对Tomcat中Java垃圾收集调优的详细说明: 首先,我们需要了解JVM内存的划分。JVM根据对象的生命周期将其划分为三个主要区域: 1. **Young Generation(年轻代)**:这是对象初次被创建的地方,包括Eden区和...

    java虚拟机(JVM)调优案例分析与MyEclipse性能调优实战

    java虚拟机(JVM)调优案例分析与MyEclipse性能调优实战

    Java虚拟机实战-垃圾回收及性能调优

    Java虚拟机实战-垃圾回收及性能调优

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    避免使用Java序列化14讲多线程之锁优化(下):使用乐观锁优化并行操作16讲多线程调优(下):如何优化多线程上下文切换17讲并发容器的使用:识别不同场景下最优容器21讲深入JVM即时编译器JIT,优化Java编译25讲答疑...

    java虚拟机(JVM)调优案例分析与Eclipse性能调优实战

    java虚拟机(JVM)调优案例分析与Eclipse性能调优实战

    JVM调优实战.doc

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

    Java_GC垃圾回收调优指南

    ### Java GC垃圾回收调优指南 #### 概述 在Java开发过程中,垃圾回收(Garbage Collection, GC)是管理内存资源的关键技术之一。合理的GC配置可以显著提高应用程序的性能和稳定性。本指南旨在帮助开发者深入理解...

    Java性能优化实战21 讲 视频课程-网盘链接提取码下载 .txt

    对 Java 工程师而言,性能优化能力决定了你能否进入大厂或成为一名高级工程师。但性能优化的能力却极难提升,如果你缺乏正确的方法论和实战演练,则很容易事倍功半。 视频大小:1.2G

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

    本文档是一篇关于JVM(Java虚拟机)性能调优的经典实战总结。在实际应用开发与维护过程中,JVM性能调优是一个非常重要的话题,它直接关系到应用程序运行效率、资源利用以及用户体验等多方面因素。本总结旨在分享作者...

    Java性能调优命令

    在Java应用程序的性能调优过程中,掌握一系列命令行工具是至关重要的。这些工具可以帮助开发者监控应用程序的运行状态,诊断性能瓶颈,并对JVM进行调优。以下是一些常用的Java性能调优命令及其用法和相关知识点。 1...

    Java内存与垃圾回收调优.docx

    总的来说,Java内存与垃圾回收调优是一项复杂而细致的工作,需要对JVM内存结构、垃圾回收机制以及相关工具和参数有深入理解。通过合理配置,我们可以显著提升应用性能,避免内存泄漏和长时间的垃圾收集导致的系统...

    阿里巴巴java性能调优实战-最新经验总结 PDF

    本文基于《阿里巴巴Java性能调优实战-最新经验总结》的内容,围绕Java性能调优这一主题,从多个角度出发,详细介绍了一系列实用的方法和技术。 #### 二、扎实的计算机基础 1. **计算机组成原理**:了解计算机硬件...

Global site tag (gtag.js) - Google Analytics