javajvm参数设置及日志查看

上传人:xiao****1972 文档编号:84822158 上传时间:2019-03-05 格式:DOCX 页数:4 大小:16.29KB
返回 下载 相关 举报
javajvm参数设置及日志查看_第1页
第1页 / 共4页
javajvm参数设置及日志查看_第2页
第2页 / 共4页
javajvm参数设置及日志查看_第3页
第3页 / 共4页
javajvm参数设置及日志查看_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《javajvm参数设置及日志查看》由会员分享,可在线阅读,更多相关《javajvm参数设置及日志查看(4页珍藏版)》请在金锄头文库上搜索。

1、基础知识-Java JVM参数设置及日志查看JVM内存参数-Xms:初始堆大小;默认值为物理内存的1/64(1GB),默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制。-Xmx:最大堆大小;默认值为物理内存的1/4(1GB)默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制-Xmn:年轻代大小(1.4or lator);注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。整个堆大小=年轻代大小 +

2、 年老代大小 + 持久代大小。增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8-XX:NewSize:设置年轻代大小(for 1.3/1.4)-XX:MaxNewSize:年轻代最大值(for 1.3/1.4)-XX:PermSize:设置持久代(perm gen)初始值物理内存的1/64-XX:MaxPermSize:设置持久代最大值;默认值为物理内存的1/4。注意IBM的JDK设置此参数无效。-Xss:每个线程的堆栈大小;JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下

3、,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在30005000左右。一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的选择。-XX:ThreadStackSize:Thread Stack Size;(0 means use default stack size) Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was

4、 0 in 5.0 and earlier); all others 0.,此值设置和-Xss设置相似,目前较多使用-Xss。-XX:NewRatio:年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5当Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。-XX:SurvivorRatio:Eden区与Survivor区的大小比值;设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10-XX:LargePageSize

5、InBytes:内存页的大小不可设置过大,会影响Perm的大小,默认为128m-XX:+UseFastAccessorMethods:原始类型的快速优化-XX:+DisableExplicitGC:关闭System.gc();这个参数谨慎使用。-XX:MaxTenuringThreshold:垃圾最大年龄;如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率,该参数只有在串行GC时才有效。-XX:+

6、AggressiveOpts:加快编译-XX:+UseBiasedLocking:锁机制的性能改善-Xnoclassgc:禁用垃圾回收-XX:SoftRefLRUPolicyMSPerMB:每兆堆空闲空间中SoftReference的存活时间,默认为1s。-XX:PretenureSizeThreshold:对象超过多大是直接在旧生代分配;默认值为0;单位字节 新生代采用Parallel Scavenge GC时无效,另一种直接在旧生代分配的情况是大的数组对象,且数组中无外部引用对象.-XX:TLABWasteTargetPercent:TLAB占eden区的百分比,默认值为1%-XX:+Co

7、llectGen0First:FullGC时是否先YGC;默认值falseJVM的性能调优对于GC的性能主要有2个方面的指标:吞吐量throughput(工作时间不算gc的时间占总的时间比)和暂停pause(gc发生时app对外显示的无法响应)。1. Total Heap 默认情况下,vm会增加/减少heap大小以维持free space在整个vm中占的比例,这个比例由MinHeapFreeRatio和MaxHeapFreeRatio指定。 一般而言,server端的app会有以下规则: 对vm分配尽可能多的memory; 将Xms和Xmx设为一样的值。如果虚拟机启动时设置使用的内存比较小,这

8、个时候又需要初始化很多对象,虚拟机就必须重复地增加内存。 处理器核数增加,内存也跟着增大。2. The Young Generation 另外一个对于app流畅性运行影响的因素是young generation的大小。young generation越大,minor collection越少;但是在固定heap size情况下,更大的young generation就意味着小的tenured generation,就意味着更多的major collection(major collection会引发minor collection)。 NewRatio反映的是young和tenured gen

9、eration的大小比例。NewSize和MaxNewSize反映的是young generation大小的下限和上限,将这两个值设为一样就固定了young generation的大小(同Xms和Xmx设为一样)。 如果希望,SurvivorRatio也可以优化survivor的大小,不过这对于性能的影响不是很大。SurvivorRatio是eden和survior大小比例。 一般而言,server端的app会有以下规则: 首先决定能分配给vm的最大的heap size,然后设定最佳的young generation的大小; 如果heap size固定后,增加young generation的

10、大小意味着减小tenured generation大小。让tenured generation在任何时候够大,能够容纳所有live的data(留10%-20%的空余)。3. 垃圾回收时promotion failed问题一般可能是两种原因产生,第一个原因是survivor space空间不够,survivor space空间里的对象还不应该被移动到年老代,但年轻代又有很多对象需要放入survivor space;第二个原因是年老代没有足够的空间接纳来自年轻代的对象;这两种情况都会转向Full GC,会导致网站停顿时间较长。解决方方案一:第一个原因的解决办法是可以去掉survivor space

11、,设置-XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0即可。注意:因为没有用到survivor space,所以年老代容易满,CMS执行会比较频繁。如果把survivor space加大,这样也不会有promotion failed。64位系统只要配置MaxTenuringThreshold参数,CMS还是有暂停。为了解决暂停问题和promotion failed问题,参考可以设置-XX:SurvivorRatio=1 ,并把MaxTenuringThreshold参数不设置,这样即不会暂停又不会有promotoin failed,而且更重要

12、的是,好多对象到不了年老代就被回收了,所以年老代和永久代上升非常慢,因此CMS执行频率非常低。 参数设置参考:-Xmx4000M -Xms4000M -Xmn600M -XX:PermSize=500M -XX:MaxPermSize=500M -Xss256K -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBefor

13、eCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -Xloggc:

14、log/gc.log CMSInitiatingOccupancyFraction值与Xmn的关系公式 如上介绍了promontion faild产生的原因是EDEN空间不足的情况下将EDEN与From survivor中的存活对象存入To survivor区时,To survivor区的空间不足,再次晋升到old gen区,而old gen区内存也不够的情况下产生了promontion faild从而导致full gc.那可以推断出:eden+from survivor =(Xmn-Xmn/(SurvivorRatior+2) 进而推断出: CMSInitiatingOccupancyFra

15、ction =(Xmx-Xmn)-(Xmn-Xmn/(SurvivorRatior+2)/(Xmx-Xmn)*100 例如: 当xmx=128 xmn=36 SurvivorRatior=1时 CMSInitiatingOccupancyFraction=(128.0-36)-(36-36/(1+2)/(128-36)*100 =73.913 当xmx=128 xmn=24 SurvivorRatior=1时 CMSInitiatingOccupancyFraction=(128.0-24)-(24-24/(1+2)/(128-24)*100=84.615 当xmx=3000 xmn=600 SurvivorRatior=1时 CMSInitiatingOccupancyFraction=(3000.0-600)-(600-600/(1+2)/(3000-600)*100=83.33 CMSInitiatingOccupancyFraction低于70% 需要调整xmn或SurvivorRatior值。 第二个原因的解决办法是设置CMSInitiatingOccupancyFractio

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号