JVM-GC调优的经验和规则
1.年轻代大小选择
响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择).在此种情况下,年轻代收集发生的频率也是最小的.同时,减少到达年老代的对象.
吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度.因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用.
避免设置过小.当新生代设置过小时会导致:1.YGC次数更加频繁 2.可能导致YGC对象直接进入旧生代,如果此时旧生代满了,会触发FGC.
2.年老代大小选择
响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数.如果堆设置小了,可以会造成内存碎 片,高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间.最优化的方案,一般需要参考以下数据获得:
并发垃圾收集信息、持久代并发收集次数、传统GC信息、花在年轻代和年老代回收上的时间比例。
吞吐量优先的应用:一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代.原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象.
3.较小堆引起的碎片问题
因为年老代的并发收集器使用标记,清除算法,所以不会对堆进行压缩.当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象.但是,当堆空间较小时,运行一段时间以后,就会出现"碎片",如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的标记,清除方式进行回收.如果出现"碎片",可能需要进行如下配置:
-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩.
-XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩
4.用64位操作系统,Linux下64位的jdk比32位jdk要慢一些,但是吃得内存更多,吞吐量更大
5.XMX和XMS设置一样大,MaxPermSize和MinPermSize设置一样大,这样可以减轻伸缩堆大小带来的压力
6.使用CMS的好处是用尽量少的新生代,经验值是128M-256M, 然后老生代利用CMS并行收集, 这样能保证系统低延迟的吞吐效率。 实际上cms的收集停顿时间非常的短,2G的内存, 大约20-80ms的应用程序停顿时间
7.系统停顿的时候可能是GC的问题也可能是程序的问题,多用jmap和jstack查看,或者killall -3 java,然后查看java控制台日志,能看出很多问题。(相关工具的使用方法将在后面的blog中介绍)
8.仔细了解自己的应用,如果用了缓存,那么年老代应该大一些,缓存的HashMap不应该无限制长,建议采用LRU算法的Map做缓存,LRUMap的最大长度也要根据实际情况设定。
9.采用并发回收时,年轻代小一点,年老代要大,因为年老大用的是并发回收,即使时间长点也不会影响其他程序继续运行,网站不会停顿
10.JVM参数的设置(特别是 –Xmx –Xms –Xmn -XX:SurvivorRatio -XX:MaxTenuringThreshold等参数的设置没有一个固定的公式,需要根据PV old区实际数据 YGC次数等多方面来衡量。为了避免promotion faild可能会导致xmn设置偏小,也意味着YGC的次数会增多,处理并发访问的能力下降等问题。每个参数的调整都需要经过详细的性能测试,才能找到特定应用的最佳配置。
转自:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
相关推荐
《JVM和GC详解及调优》是一本深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的专业...对于团队负责人或系统架构师而言,理解JVM和GC调优也是必不可少的技能,有助于提升整个系统的稳定性和效率。
总结来说,JVM性能调优中的垃圾回收(GC)和内存管理是确保Java应用高效运行的关键。了解Java对象引用类型、垃圾回收算法以及分代处理垃圾的概念是进行JVM性能调优的基础。这些知识点对于准备Java面试的开发者来说,...
### JVM性能调优 #### JVM概念与发展历程 Java虚拟机(JVM)是Java Virtual Machine的简称,它是一种能够执行Java字节码的虚拟机。JVM的主要作用是在不同...在实践中不断学习和摸索,才能真正掌握JVM性能调优的精髓。
JVM运行时可通过参数进行配置,以便进行性能调优。参数分为几种类型,包括XX参数、X参数、标配参数等。合理设置这些参数,例如堆大小-Xms和-Xmx、线程栈大小-Xss、元空间大小-XX:MetaspaceSize等,对于JVM性能优化至...
JVM(Java Virtual ...总的来说,"JVM01-课程介绍1"是一门全面而深入的JVM教程,旨在帮助学习者建立扎实的JVM理论基础,掌握性能分析和问题排查技巧,以及积累实战经验,从而提升在Java开发和运维领域的专业能力。
- 经验法则建议,服务端JVM的 `-Xmn`(新生代大小)最好设置为 `-Xmx` 的1/3,以优化垃圾收集(GC)性能。 1.1.2 **连接器调整** - Tomcat的连接器通过配置`<Connector>`标签进行管理,可以通过启用线程池来改善...
GCViewer通过读取这些日志,可以实时监控GC的执行情况,对于排查性能问题和调优有着重要的作用。 三、主要功能 1. **实时监控**:GCViewer能够实时更新GC日志中的信息,动态显示GC事件,使开发者能够及时发现异常...
- **垃圾收集器选择与调优**:选择适合工作负载的垃圾收集器,例如Parallel GC、CMS GC或G1 GC。调整垃圾收集频率和暂停时间目标(`-XX:MaxGCPauseMillis`)以平衡吞吐量和响应时间。 - **类加载与方法区优化**:...
5. 类型系统:JVM支持基本类型、引用类型和数组,理解它们的交互和转换规则有助于编写高效代码。 二、JVM诊断 1. JMX(Java Management Extensions):提供管理和监控JVM的工具,可以查看运行时的内存、线程、类...
- **GC日志分析**:通过JVisualVM等工具进行性能监控与调优。 3. **性能调优案例** - 分析常见的JVM性能瓶颈及其解决策略。 - 使用`-XX:+PrintGCDetails`等命令收集GC日志。 - 基于实际情况调整JVM参数,如`-...
8. **JVM调优**:包括堆大小设置、新生代与老年代比例、GC策略选择等,通过监控工具如JVisualVM进行分析和调整,以提升系统性能。 9. **JVM参数设置**:如-Xms和-Xmx设置堆内存大小,-XX:NewRatio调整年轻代和老年...
- **GC调优**:选择合适的GC算法和参数,例如-XX:+UseConcMarkSweepGC启用CMS收集器。 - **类加载器调优**:理解双亲委派模型,避免类加载混乱。 - **堆栈大小调整**:通过-Xss设置每个线程的栈大小。 6. **性能...
JVM调优主要包括堆大小调整、新生代与老年代比例设置、GC策略选择、内存泄露检测等。使用工具如VisualVM、JProfiler可以帮助分析和调优。 6. **谈谈JVM的垃圾收集器?** 常见的垃圾收集器有Serial、Parallel、...
本文将详细介绍如何调优Eclipse,以提高启动速度,减少因JVM内存回收导致的卡顿问题,并涵盖一系列实用设置,如代码折叠、本地历史、代码格式化以及各种编辑器和工作空间的个性化配置。 ### 加快启动速度 1. **...
6. **JVM性能监控工具**:如JConsole、VisualVM和JMX,这些工具能帮助开发者实时监控JVM的状态,包括CPU使用率、内存分配、线程状态等,从而发现问题并进行调优。 7. **性能调优**:包括JVM参数调整、代码优化、...
8. **第10章:JVM内存模型与并发内存** - 讨论Java内存模型(JMM)和并发内存访问的规则,如volatile、synchronized关键字的实现。源代码可能涉及并发编程中的数据一致性问题。 9. **第11章:JVM异常处理与断言** -...
在本文中,我们将探讨Eclipse的性能调优策略,以及JVM内存管理和垃圾回收机制等相关知识点。 首先,Eclipse作为一款强大的Java开发工具,其性能优化主要包括以下几个方面: 1. **启动速度优化**:可以通过减少工作...