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占比。

posted @ 2019-06-25 15:26  Kero小柯  阅读(411)  评论(0编辑  收藏  举报