JVM问题处理
1 CPU标高的一般处理步骤
- top查找出哪个进程消耗的cpu高
- top –H –p查找出哪个线程消耗的cpu高
- 记录消耗cpu最高的几个线程
- printf %x 进行pid的进制转换
- jstack记录进程的堆栈信息
- 找出消耗cpu最高的线程信息
2 内存标高(OOM)一般处理步骤
- jstat命令查看FGC发生的次数和消耗的时间,次数越多,耗时越长说明存在问题;
- 连续查看jmap –heap 查看老生代的占用情况,变化越大说明程序存在问题;
- 使用连续的jmap –histo:live 命令导出文件,比对加载对象的差异,差异部分一般是发生问题的地方。
3 GC引起的单核标高
单个CPU占用率高,首先从GC查起。
4 常见SY标高
- 线程上下文切换频繁
- 线程太多
- 锁竞争激烈
5 Iowait标高
如果IO的CPU占用很高,排查涉及到IO的程序,比如把OIO改造成NIO。
6 抖动问题
原因:字节码转为机器码需要占用CPU时间片,大量的CPU在执行字节码时,导致CPU长期处于高位;
现象:“C2 CompilerThread1” daemon,“C2 CompilerThread0” daemon CPU占用率最高;
解决办法:保证编译线程的CPU占比。
作者:Kero小柯
出处:http://www.cnblogs.com/kesimin/
本文版权归作者和博客园共有,欢迎转载,但必需注明出处,并且在文章页面明显位置给出原文连接。