35

平时碰到系统CPU飙高和频繁GC,你会怎么排查?-Java技术学习笔记

 4 years ago
source link: https://blog.51cto.com/14528283/2438511
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
​处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,然后重启系统,尽快保证系统的可用性。这种情况可能的原因主要有两种:代码中某个位置读取数据量较大,导致系统内存耗尽,从而导致Full GC次数过多,系统缓慢;代码中有比较耗CPU的操作,导致CPU过高,系统运行缓慢;相对来说,这是出现频率最高的两种线上问题,而且它们会直接导致系统不可用。另外有几种情况也会导致某个功能运行缓慢,但是不至于导致系统不可用:代码某个位置有阻塞性的操作,导致该功能调用整体比较耗时,但出现是比较随机的;某个线程由于某种原因而进入WAITING状态,此时该功能整体不可用,但是无法复现;由于锁使用不当,导致多个线程进入死锁状态,从而导致系统整体比较缓

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK