`
youyu4
  • 浏览: 441969 次
社区版块
存档分类
最新评论

JVM之优化延迟或响应时间

 
阅读更多

JVM之优化延迟或响应时间

 

优化标准

 

在优化延迟的时候,其实就是要调整堆大小,年轻代大小,让GC的时间和频率达到要求。下面是几个优化时需要参考的标准:

 

  • Minor GC的时间
  • Minor GC的频率
  • Full GC的时间
  • Full GC的频率

 

 

优化年轻代大小

 

       当测试垃圾回收数据的时候,发现MinorGC的时间太长了,正确的做法就是减少young代的空间大小。如果MinorGC太频繁了就增加young代的空间大小。

 

看看下面例子是怎么优化年轻代:



 上图是一个展示了MinorGC的例子,这个例子是运行在如下的HotSpot VM命令参数下的。

 

 

-Xms6144m -Xmx6144m -Xmn2048m -XX:PermSize=96m -XX:MaxPermSize=96m -XX:+UserParallelOldGC  
 上图显示了MinorGC平均的消耗时间是0.05秒,平均的频率是2.147秒1次。当计算MinorGC的消耗时间和频率的时候,越多的数据参与计算,准确性会越高。并且应用要处于稳定运行状态下来收集MinorGC信息也是非常重要的。

 

 

 

  • 如果要求消耗时间是0.04秒,那应该调小年轻代
  • 如果要求频率是5秒一次,就应该调大年轻代

 

注意

 

  • 调整年轻代大小时,要控制老年代不变,所以需要同时调整-Xms和-Xmx
  • 增大或减少堆空间时,按10%去调整
  • old代的空间一定不能小于活动对象的大小的1.5倍
  • young代的空间至少要有Java堆大小的10%,太小的Java空间会导致过于频繁的MinorGC
  • 当提高Java堆大小的时候,不要超过JVM可以使用的物理内存大小。如果使用过多的物理内存,会导致使用交换区,这个会严重影响性能

如果在仅仅是MinorGC导致了延迟的情况下,你无法通过调整young代的空间来满足系统的需求,那么你需要重 新修改应用程序、修改JVM部署模型把应用部署到多个JVM上面(通常得要多机器了)或者重新评估系统的需求。

 

 

 

计算老年代垃圾回收的频率

 

      上面的Minor GC,可以通过日志就能看到GC的频率和时间,但是对于Full GC,也是可以通过日志来看到Full GC 的时间和频率。其实频率也是可以估算出来的。

 

接下有个几个MinorGC的例子,他们被用来评估FullGC的频率。

 

2010-12-05T14:40:29.564-0800: [GC  
[PSYoungGen: 2045989K->249795K(2097152K)]  
3634533K->1838430K(6291456K), 0.0543798 secs]  
[Times: user=0.38 sys=0.01, real=0.05 secs]  
2010-12-05T14:40:31.949-0800: [GC  
[PSYoungGen: 2047896K->247788K(2097152K)]  
3655319K->1859216K(6291456K), 0.0539614 secs]  
[Times: user=0.35 sys=0.01, real=0.05 secs]  
2010-12-05T14:40:34.346-0800 [GC  
[PSYoungGen: 2045889K->248993K(2097152K)]  
3677202K->1881099K(6291456K), 0.0532377 secs]  
[Times: user=0.39 sys=0.01, real=0.05 secs] 
2010-12-05T14:40:36.815-0800 [GC  
[PSYoungGen: 2047094K->247765K(2097152K)]  
3696985K->1900882K(6291456K), 0.0543332 secs]  
[Times: user=0.37 sys=0.01, real=0.05 secs] 
 

 

从上面的例子可以看出:

       1、Java堆的大小是6291456K或6144M

       2、young代的大小是2097152K或2048M

       3、old代的大小是6144M-2048M = 4096M

 

在这个例子中,活动对象的大小差不多是1370M。那么old代还有2726M剩余空间(4096M-1370M=2726M)。

 填充完成2736M空间需要多长时间是由young代向old代的转移率决定的。这个转移率的计算通过查看每次MinorGC后old代的占用空间的增长情况以及MinorGC发生的时间。old代的空间占用是MinorGC之后Java堆中对象大小减去young代的大小,通过这个公式计算,可以看出在这个例子中每次MinorGC之后,old代的空间占用情况是:

 

       1588635K,第一个MinorGC

       1611428K,第二次MinorGC

       1632106K,第三次MinorGC

       1653117K,第四次MinorGC

 

       每次的增量分别是

       22793K,第一次和第二次的增量

       20678K,第二次和第三次的增量

       21011K,第三次和第四次的增量

 

       平均每次MinorGC转移大概201494K或者叫21M。

 

如果剩余的空间都是按照设个转移率来转移到old代的话,且知道MinorGC的频率是每2.147秒一次。因此,这个转移率是201494K/2.147s差不多10M/s,那么一共的空间是2736M空间需要273.6s差不多4.5分钟一次。

 

因此,通过前面的案例分析,应用的最差延迟的频率是4.5分钟。这个评估可以通过让应用处于稳定运行状态超过4.5分钟来验证。

 

 

 

优化老年代大小

 

       如果评估和观察的FullGC的频率高于了应用对最坏延迟频率的要求,那么可以提高old代的空间大小。如果改变old代的大小,保持young代的空间恒定,在优化young代的时候也说这个问题,两者应该独立优化,以保证有高效。

 

Full GC 例子:



 

       如果这步已经达到了你最坏延迟的要求,那么这一步调优延迟就算已经完成了,就可以进入下一步去调优“吞吐量”了。

   

       如果你未能达到了应用对最坏延迟时间和频率的性能要求,由于FullGC的执行时间太长了,然后你可以把垃圾回收器切换CMS(concurrent garbage collection)。CMS有能力让垃圾回收尽量是多线程的,即让程序保持在运行状态。要使用CMS可以通过下面这条命令选项:-XX:+UseConcMarkSweepGC。

 

  • 大小: 215.6 KB
  • 大小: 164.5 KB
分享到:
评论

相关推荐

    jvm详细介绍以及性能优化方法

    文档"深入Java虚拟机(原书第2版).pdf"将为你提供更深入的理论基础,"jvm优化.docx"涵盖了具体的JVM调优技巧,而"tomcat性能调优.docx"则专注于Tomcat的优化实践。通过学习这些资料,你将能够更好地理解和优化你的...

    jvm优化参数配置

    "jvm优化参数配置"是确保Tomcat稳定运行的关键环节,能够提高应用的响应速度,减少内存泄露,提升系统整体性能。以下是对JVM参数优化的详细解释: 1. **内存配置**: - **堆内存(Heap Memory)**:分为新生代...

    WebSphere性能优化之二:JVM的运行效率.doc

    【WebSphere性能优化:JVM运行效率】 在WebSphere应用服务器的性能调优过程中,Java虚拟机(JVM)的优化扮演着至关重要的角色。由于Java程序中的内存管理主要是通过垃圾收集(GC)来实现,因此,理解并优化GC的行为...

    一步步优化JVM.docx

    JVM优化不仅仅是调整参数,而是要结合具体应用的特点,找到最佳的运行环境。 优化现代JVM需要考虑多个方面。首先,了解应用性能需求是至关重要的。这些需求可能包括但不限于吞吐量、响应时间、内存占用、启动时间、...

    Tomcat 调优及 JVM 参数优化

    这篇文章将深入探讨Tomcat调优与JVM参数优化的各个方面,帮助你提升服务器性能。 首先,我们来了解一下Tomcat调优的基础知识。Tomcat调优主要包括以下几个方面: 1. **线程池配置**:调整`maxThreads`和`...

    面试必问之jvm与性能优化.docx

    高效的JVM配置能大幅提升Java应用的响应速度和吞吐量,减少延迟。 2.资源利用效率。优化内存和CPU使用,避免资源浪费,降低硬件成本。 3.稳定性和可维护性。通过优化垃圾收集和内存分配,减少程序崩溃和内存泄漏的...

    jvm优化.docx

    总之,JVM优化是一个涉及多方面因素的复杂过程,包括堆内存大小的调整、内存区域比例的设定以及选择合适的垃圾收集器策略。正确地配置这些参数能够显著提升Java应用的性能和响应速度,但需要根据应用的实际运行情况...

    jvm -spark-优化

    - 选择合适的垃圾回收器,例如G1 GC或CMS GC,可以显著改善Spark应用的响应时间和吞吐量。 - 通过参数`-XX:+UseG1GC`启用G1 GC,适用于大内存环境;`-XX:+UseConcMarkSweepGC`则适用于需要低延迟的情况。 3. **...

    jvm调优,java 虚拟机优化

    优化Tomcat配置可以提高其处理请求的能力,降低响应延迟。 总的来说,JVM调优是一个复杂而细致的过程,需要结合应用的特性和实际运行情况,通过调整内存分配、选择合适的垃圾收集器、监控和分析GC行为,以及优化...

    jvm配置和优化.txt

    ### JVM配置与优化详解 #### 一、JVM垃圾回收机制及配置优化 **1.1 垃圾回收机制概述** JVM(Java虚拟机)的垃圾回收机制(Garbage Collection, GC)是自动内存管理的核心部分。它负责识别并回收不再使用的对象所...

    如何调优JVM - 优化Java虚拟机(大全+实例).pdf

    Java虚拟机(JVM)调优是提升Java应用程序性能的关键环节。JVM调优涉及到堆内存设置、垃圾...同时,随着JVM版本的更新,一些参数可能不再适用或有新的优化选项出现,因此及时了解JVM的最新特性和最佳实践是十分必要的。

    30+个视频+深入理解Java虚拟机(jvm优化+内存模型+虚拟机原理)

    不同版本的JVM可能会采用不同的垃圾回收策略来平衡吞吐量和延迟时间。 ### JVM性能优化技巧 1. **选择合适的垃圾回收器**: 不同的应用场景适合不同的GC策略。例如,对于响应时间要求高的应用来说,可以考虑使用G1...

    jvm虚拟机参数调优,tomcat调优

    例如,对于低延迟需求的应用,可以选用CMS或G1收集器,它们能提供更好的响应时间。`-XX:+UseConcMarkSweepGC`启用CMS,`-XX:+UseG1GC`启用G1。 线程池配置包括最大线程数、最小线程数、线程空闲时间等,可以通过`-...

    monkey老师的jvm 调优

    每种收集器有不同的性能特点,根据应用类型和硬件配置选择合适的组合,如低延迟应用可选CMS或G1,而服务器应用则可能更适合Parallel。例如,通过`-XX:+UseConcMarkSweepGC`启用CMS收集器。 3. **类加载机制**:JVM...

    JVM历史发展和内存回收笔记

    3. **Java 2 Platform, Standard Edition (J2SE)**:2000年,J2SE发布,引入了更多的JVM优化技术,如JIT编译器的进一步改进和内存管理的优化。 4. **Java 5.0与泛型**:2004年,Java 5.0引入了泛型、枚举、自动装箱...

    JVM体系结构与GC调优

    根据应用需求,比如低延迟或高吞吐,可以调整相关参数来优化性能。 例如,如果追求低延迟,可以选择G1 GC,它能够预测并控制GC暂停时间。而如果关注整体吞吐量,CMS或ZGC可能更合适,因为它们能够在大多数时间里...

    JVM性能调优经典教程

    例如,CMS适用于低延迟要求的系统,而G1则能提供更好的整体响应时间。 3. **JVM参数调整**:通过设置JVM启动参数,可以定制JVM的行为。比如,`-Xms`和`-Xmx`用于设置堆内存的初始大小和最大大小,`-XX:NewRatio`...

    JVM之垃圾回收器

    **JVM之垃圾回收器** Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码并管理程序运行时的内存。在JVM的内存模型中,垃圾回收(Garbage Collection, GC)是一项重要的功能,它自动识别并清理不再...

    JAVA命令大全-JVM设置.rar

    调整JVM参数可以改善应用程序的启动时间、响应速度和内存消耗。 2. **类加载机制**:JVM采用双亲委派模型加载类,理解这个机制有助于解决类冲突和类加载问题。 3. **JVM内存结构**:理解堆(Heap)、方法区...

Global site tag (gtag.js) - Google Analytics