线上问题与排查

编程

死锁

一文学会Java死锁和CPU 100% 问题的排查技巧

如何避免死锁,我们有什么套路可循?(举例说明,浅显生动,给出了死锁发生的Coffman条件,并从破坏条件角度讲如何避免死锁)

CPU利用率高

  • 可能在频繁进行Full GC
  • 进行比较耗时的计算

如果是Full GC次数过多,那么通过jstack得到的线程信息会是类似于VM Thread之类的线程,而如果是代码中有比较耗时的计算,那么我们得到的就是一个线程的具体堆栈信息。

原创|面试官:线上服务器CPU占用率高如何排查定位问题?

Full GC频繁

总结来说,对于FullGC次数过多,主要有以下两种原因:

  • 代码中一次获取了大量的对象,导致内存溢出,此时可以通过eclipse的mat工具查看内存中有哪些对象比较多;
  • 内存占用不高,但是FullGC次数还是比较多,此时可能是显示的System.gc()调用导致GC次数过多,这可以通过添加-XX:+DisableExplicitGC来禁用JVM对显示GC的响应。

系统运行缓慢,CPU100%,以及FullGC次数过多问题的排查思路

不定期出现的接口耗时现象

首先找到该接口,通过压测工具不断加大访问力度,如果说该接口中有某个位置是比较耗时的,由于我们的访问的频率非常高,那么大多数的线程最终都将阻塞于该阻塞点,这样通过多个线程具有相同的堆栈日志,我们基本上就可以定位到该接口中比较耗时的代码的位置。

系统运行缓慢,CPU100%,以及FullGC次数过多问题的排查思路

以上是 线上问题与排查 的全部内容, 来源链接: utcz.com/z/516938.html

回到顶部