75. CPU 100%运行实战案例分析

Posted to.to

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了75. CPU 100%运行实战案例分析相关的知识,希望对你有一定的参考价值。

75. CPU 100%运行实战案例分析

生产库问题现象:
1),每次tomcat启动后第8天左右就会出现CPU 100%运行的情况;
2),jmap -heap pid命令查看老年代已使用99%;

jvm启动配置项:
-server -Xms2048m -Xmx2048m -Xmn700m -XX:SurvivorRatio=8 -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -Xloggc:/usr/local/work/tomcat/logs/jvmgc.log

案发现场jmap堆内存分配截图:

案发时GC情况,每隔几秒执行一次full gc:

tomcat刚启动时:

一次GC前后Survivo占用内存大小分析,每次减少1M左右:

运行至最后:


发现每次年轻代垃圾回收后Survivo区会减少1500或2048K
通过分析应该是jvm自动调整了年轻代堆内存大小及Survivor比例,经过查找jvm是通过 -XX:+UseAdaptiveSizePolicy和 -XX:-UseAdaptiveSizePolicy来启用和禁用jvm自动调整堆内存大小的,通过jinfo -flag UseAdaptiveSizePolicy pid参数配置查看命令可以看到当前配置是打开的即(-XX:+UseAdaptiveSizePolicy),在jvm参数中设置为禁用(-XX:-UseAdaptiveSizePolicy)过一段时间后查看Survivo区域按照配置值进行分配未再随时间减少,问题解决后最终参数配置:

-server -Xms2048m -Xmx2048m -Xmn700m -XX:SurvivorRatio=8 -XX:PermSize=256m 
-XX:MaxPermSize=256m -XX:+UseAdaptiveSizePolicy   -XX:+PrintGCDetails 
-XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution 
-Xloggc:/usr/local/work/tomcat/logs/jvmgc.log

相关问题分析连接:
http://www.cnblogs.com/moonandstar08/p/5751175.html

以上是关于75. CPU 100%运行实战案例分析的主要内容,如果未能解决你的问题,请参考以下文章

一个C++工程CPU占用100%问题的排查

线上服务CPU100%问题快速定位实战--转

记一次线上故障--HashMap在多线程条件下运行造成CPU 100%

记一次线上故障--HashMap在多线程条件下运行造成CPU 100%

记一次线上故障--HashMap在多线程条件下运行造成CPU 100%

CPU持续100%分析并解决