`
songbin0201
  • 浏览: 320030 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jvm内存设置及总结

 
阅读更多
Application情况:
大量使用了内存缓存,应用负载量较大,900w/d-1000w/d,对响应速度要求较高,因此gc造成的应用中断现象需要尽量控制在最小范围内。

系统情况:
2个8核的cpu,共2*8=16的处理器(processor),总大小为16G的内存。

调优方式:
1、-Xms -Xmx
设置初始堆最大和最小内存;经过测试,目前tomcat容器可以设置的最大内存为3G
-Xms3072M -Xmx3072M,避免gc后jvm重新分配内存,影响性能

2、-Xmn
设置年轻带Young Gen的内存大小,sun官方推荐Young Gen为整个堆内存的3/8,设置过小的Young Gen,会导致minor collection过于频繁,虽然提高了系统吞吐,确也提高了应用中断次数和时间,对于需要快速响应的服务而言不太适合,因此提高Young Gen是提升性能很关键的一步。
-Xmn1024M

3、设置collector
collector为垃圾收集器,目前主要有三种,serial collector(串行收集器)、parallel collector(并行收集器)、concurrent collector(并发收集器)
JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。

parallel collector(并行收集器):以thoughout吞吐量为目标
concurrent collector(并发收集器):以响应时间为目标,尽量减小gc造成的应用中断,以牺牲CPU为代价,提高了CPU的使用率

-Xms3g -Xmx3g -Xmn1g -XX:PermSize=128M -XX:+PrintGCDetails -XX:+UseParNewGC -XX:ParallelGCThreads=16 -XX:+UseConcMarkSweepGC

4、failed
promotion failed
参考http://blogs.oracle.com/jonthecollector/entry/when_the_sum_of_the
concurrent mode failure
参考 http://blogs.oracle.com/jonthecollector/entry/what_the_heck_s_a
jvm调整成如上参数后,似乎gc的时间短了,中断的次数和时间也大大提升,但是意外的发现了几次如下的错误
[GC [ParNew (promotion failed): 839835K->840090K(943744K), 0.2078800 secs][CMS[Unloading class sun.reflect.GeneratedMethodAccessor661]
[GC [ParNew (promotion failed): 843545K->843165K(943744K), 0.4597140 secs][CMS[Unloading class sun.reflect.GeneratedMethodAccessor1018]

[GC [ParNew (promotion failed): 841739K->840457K(943744K), 0.2063630 secs][CMS[CMS-concurrent-sweep: 3.139/3.521 secs] [Times: user=10.76 sys=0.57, real=3.52 secs] 
 (concurrent mode failure)[Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1790]

promotion failed和concurrent mode failure都会造成应用程序的中断,即所谓的stop-the-world。

a)产生上述问题的原因,原文是这样描述的(if theconcurrent collector is unable to finish reclaiming the unreachable objectsbefore the tenured generation fills up, or if an allocation cannot be satisfiedwith the available free space blocks in the tenured generation, then theapplication is paused and the collection is completed with all the applicationthreads stopped),简单解释就是old gen剩余的内存不足以满足来自于young gen的垃圾回收,导致jvm通过卸载已经生成的反射类来释放足够的内存。这种现象会造成应用较长时间的中断,从而影响性能。所以理论上应该保证eden + from survivor < old gen区剩余内存。

解决方法可以参考如下:通过设置-XX:CMSInitiatingOccupancyFraction=50(此值的初始值为10,即预留10%的空间给minor collection),当old gen已经收集了50%的内存后,就开始进行major collection,从而保证old gen 始终预留50%的可用内存。
这种设置虽然会提高major collection的频率,但是根据目前major collection的频率来看(大概几个小时一次)足以承受。

b)promotion failed,也会因为old gen 的碎片太多为进行过内存重组和压缩,无法提供一块较大的、连续的内存空间。解决方法可以通过设置参数-XX:+UseCMSCompactAtFullCollection(打开对年老代的压缩)-XX:CMSFullGCsBeforeCompaction(设置运行多少次FULL GC以后对内存空间进行压缩、整理)
分享到:
评论
2 楼 snowolf 2012-02-17  
留着备用!
1 楼 cbz6210499 2011-12-29  
你好~  我的服务器是16G内存 8核cpu , 现在感觉性能很差, 你能不能把你的jvm配置 给我一份呢,谢谢~

相关推荐

    JVM 内存结构及配置总结

    JVM内存结构,配置参数,JVM调优监控,待完善

    JVM调优与内存管理总结

    JVM内存调优,java内存管理总结。包含新生代、老年代等详解。还有垃圾回收收集器详解。

    JVM内存模型详解

    jvm内存模型,jvm脑图,jvm调优,jvm垃圾回收算法,jvm垃圾回收器,逃逸算法等总结。

    java中jvm内存分配相关资料总结整理

    关于java的内存分配问题,jvm的运行原理相关资料总结

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    第二节:JVM内存模型 1.1 概念 1.2 JVM内存模型 1.3 Heap堆内存模型 第三节:定位垃圾对象的依据 1.1 引用计数法 1.2 可达性算法 第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)...

    jvm内存溢出

    jvm内存溢出 学习笔记

    JAVA JVM内存监控工具总结

    可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 jmap:打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 jconsole:一个javaGUI监视工具,可以以图表化的形式...

    Jvm内存面试问题总结(2020).docx

    自己在学习和面试过程中总结的一些常见面试题 , 包含了java内存模型 , java8以后内存变化. 垃圾回收算法, 常见的垃圾回收器 , G1垃圾回收器的优化 堆外内存如何使用等. 希望和大家共同进步 . 祝拿到满意的...

    JVM规范--高手总结

    JVM内存模型 4 2.1 JVM规范 5 2.2 Sun JVM 8 2.3 SUN JVM内存管理(优化) 10 2.4 SUN JVM调优 13 2.5.JVM简单理解 16 2.5.1 Java栈 16 2.5.2 堆 16 2.5.3 堆栈分离的好处 20 2.5.4 堆(heap)和栈(stack) 20 JAVA垃圾...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

    2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...

    JVM_启动参数_总结

    JVM_启动参数_总结。详细介绍JVM的详细启动参数及JVM垃圾回收机制。

    jvm内存调优.jpg

    jvm内存调优是高级工程师以上岗位的面试中经常会被问到的问题,有一定深度和难度的问题,学习java,如果不知道jvm内存调优,说明肯定是个小菜鸟,小编总结了一些知识点供大家学习与分享

    jvm内存和垃圾回收.xmind

    自己总结的jvm中内存和垃圾回收的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者

    JVM内存调优深入文章共享

    最近总结JVM内存调优的一些东西,基本上是网上一些资料的汇总。 文章从算法,垃圾回收机制等多个方面对JVM的工作机制进行描述,使读者对JVM 有个全面的了解。

    JVM调优与JAVA内存管理总结.docx

    JVM调优与JAVA内存管理总结.docx

    JVM深入理解.xmind

    文件总结了JVM的体系结构:四大块,类装载子系统(class loader subsystem),执行引擎子系统(Executionengine子系统),垃圾回收系统(gc),运行时数据区(JVM内存)。

    JAVA内存分区与CC++内存分区的总结

    JAVA内存分区与CC++内存分区的总结

    面试总结-JVM .png

    JVM 的运行机制 多线程 JVM 的内存区域 JVM 会创建操作系统的接口创建一个原生线程。JVM 线程和操作系统线程是一一对应的

    jvm内存管理和垃圾回收

    很久之前就一直在学习JVM,但是一直也没有好好的总结,最近终于有了空闲,将之前学习的内容整理成了一个PPT。 也希望大神们可以批评指正。 ppt中主要包含下面几部分: Java内存模型 内存分配策略 分代垃圾收集...

    个人总结JVM脑图

    详解JVM组成,GC,内存区域,以及一些GC机制和算法,一些简单的调优

Global site tag (gtag.js) - Google Analytics