Tomcat异常JVM堆内存泄露排查思路

  • A+
所属分类:Service

1:CPU 故障排除

2:内存溢出

原理:

JVM调优一般指JAVA堆的调优,JAVA堆的线程是共享的,优点是可以动态的分配内存的大小,生存期不必事先告诉编译器,其是在运行期间动态分配的,垃圾回收器会自动收走不再使用的空间区域。缺点是由于动态分配,因此在分配与销毁期间都要占用时间,因此效率不高。
JVM堆的结构是:Young Generation(青年代)[Eden\From\To]、Tenured Generation(OLd老年代)、Permanent Generation(持久代、方法区)
备注:Minor GC回收 Young,在串行情况下,
JVM垃圾收集算法:1:引用计数算法(弃);2:根搜索算法
JVM垃圾回收算法:1:复制算法(Copying)[新生代]、2:标记清除算法(Mark-Sweep)3:标记整理压缩算法(Mark-Compac)

参数:

-Xss:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右
-Xms:初始堆大小,默认为内存的1/64。此值可以设置与-Xmx相同,以避免每次gc垃圾回收完成后JVM重新分配内存。
-Xmx:最大堆大小,默认为内存的1/4。建议不超过4GB。
-Xmn:配置Young大小,默认值的整个堆的3/8,(XX:NewSize=1024m -XX:MaxNewSize=2048m for 1.3 1.4)
-XX:NewRatio:年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。不用配置。
-XX:SurvivorRatio:Eden区与Survivor区的大小比值,设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。
-XX:PretenureSizeThreshold=1024:单位为字节,默认为0。代表超过多大时就不在新生代分配,而是直接在老年代分配。
-XX:PermSize:表示非堆区初始内存分配大小
-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。
-XX:+UseSerialGC:开启新生代串行回收器,Serial New + Serial Old的收集器组合进行内存回收。复制算法
-XX:+UseSerialGC:开启老年代串行回收器,Serial New + Serial Old的收集器组合进行内存回收。标记整理压缩算法
-XX:+UseParNewGC:开启新生代并行回收器,ParNew + Serial Old的收集器组合进行内存回收。复制算法
-XX:ParallelGCThreads:指定线程数,默认最好与 CPU 数量相当,避免过多的线程数影响垃圾收集性能。
-XX:+UseParallelGC:开启新生代并发回收器,arallel Scavenge+Serial Old收集器组合回收垃圾,这也是在Server模式下的默认值
-XX:GCTimeRatio:来设置用户执行时间占总时间的比例,默认99,即1%的时间用来进行垃圾回收
-XX:MaxGCPauseMillis:设置GC的最大停顿时间
-XX:+UseParallelOldGC:开启老生代并发回收器,Parallel Scavenge +Parallel Old组合收集器进行收集。标记整理算法。
-XX:+UseConcMarkSweepGC:使用ParNew + CMS + Serial Old的收集器组合进行内存回收,Serial Old作为CMS出现“Concurrent Mode Failure”失败后的后备收集器使用。标记-清除算法
-XX:ParallelCMSThreads:手工设定 CMS 的线程数量,CMS 默认启动的线程数是(ParallelGCThreads+3)/4)。
-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后出发垃圾收集,默认值为68%,仅在CMS收集器时有效,-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSCompactAtFullCollection:由于CMS收集器会产生碎片,此参数设置在垃圾收集器后是否需要一次内存碎片整理过程,仅在CMS收集器时有效。
-XX:CMSFullGCsBeforeCompaction:设置CMS收集器在进行若干次垃圾收集后再进行一次内存碎片整理过程,通常与UseCMSCompactAtFullCollection参数一起使用。
-XX:CMSInitiatingPermOccupancyFraction:设置Perm Gen使用到达多少比率时触发,默认92%

参考文档:
1:http://blog.csdn.net/alli0968/article/details/52460008
2:http://www.importnew.com/13827.html
3:http://blog.csdn.net/haoluojie/article/details/51273418
4:http://blog.163.com/tell_how/blog/static/18151879020116181247213/
5:http://unixboy.iteye.com/blog/174173/
6:http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html