应用程序内存泄漏问题排查--运维排查技巧


                                                                                           应用程序内存泄漏问题排查        


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(老年区):单线程








如上表所示,目前主要有串行、并行和并发三种,对于大内存的应用而言,串行的性能太低,因此使用到的主要是并行和并发两种。并行和并发 GC 的策略通过 UseParallelGC 和 UseConcMarkSweepGC 来指定,还有一些细节的配置参数用来配置策略的执行方式。例如:XX:ParallelGCThreads, XX:CMSInitiatingOccupancyFraction 等。 通常:Young 区对象回收只可选择并行(耗时间),Old 区选择并发(耗 CPU)。


猜你喜欢

转载自blog.51cto.com/breaklinux/2459137