应用程序内存泄漏问题排查
1.文章的由来;
在日常运维过程中,会遇到服务器资源居高不下,或者CPU内存暴涨问题而引发的oom导致服务不可用 (大多数程序都是java应用),由此编写了该文章,为工作排查问题参考依据和快速定位问题方法;
2.基础知识储备;
(1).jvm 配置常见参数:
堆参数参数参数描述
-Xms设置 JVM启动时堆内存的初始化大小
-Xmx设置堆内存最大值
-Xmn设置年轻代的空间大小,剩下的为年老代的空间大小
-XX:PermGen设置永久代的内存初始化大小(JDK1.8 开始废弃永久代)
-XX:MaxPermGen设置永久代的最大值
-XX:SurvivorRatio设置Eden区和Survivor区的空间比例:Eden/S0 =Eden/S1 默认8
-XX:NewRatio设置年老代和年轻代的比例大小,默认值是2
回收器参数-XX:+UseSerialGC串行,young (年轻区)和Old(老年区)都使用串行,使用复制算法回收,逻辑简单高效,无现场切换开销
-XX:+UseParallelGC并行, young (年轻区)使用 Parallel scavenge 回收算法,会产生多个线程并行回收。通过-XX:ParallelGCThreads=n 参数指定有线程数,默认为cpu核数,Old(老年区):单线程
-XX:+UseParallelOldGC并行 和UseParallelGC 一样,young (年轻区) 和Old(老年区) 垃圾回收都使用多线程收集
-XX:+UseConMarkSweepGC并发,短暂停顿的并发收集,young区可以使用普通的或者parallel垃圾回收算法,由参数 --XX:+UseParNewGC 来控制; Old区