一、CPU飆高原因:
1.大量中斷
中斷分爲軟中斷(軟中斷是一種需要內核爲正在運行的進行去做一些事情的請求)和硬中斷(外部引起的)
2.系統負載高
負載高表示有很多程序等待調度運行,它會導致上下文切換頻繁
3.上下文切換頻繁
二、排查
1.top命令查看佔用CPU的pid
2.top -H -p pid 查找pid下面的線程id,顯示線程的cpu的佔用時間,佔用比例,發現有很多個線程都會CPU佔用很高,只能每 個排查
3.jstack查看線程信息,命令: jstack pid >> aaaa.txt 輸出到文本中再搜索,也可以直接管道搜索 jstack pid | grep "線程id" 這個線程id是16進製表示,需要轉一下,可以用這個命令轉 printf "%x\n" tid 也可以自己計算器轉一下。
三、經常出現CPU飆高場景
1.大量併發的I/O操作
一般 I/O 操作不會消耗太多的 CPU ,因爲主要的時間消耗會在 I/O 操作的設備上。比如從磁盤讀文件時,主要的時間在 磁 盤內部的操作上,而消耗的 CPU 時間只佔 I/O 操作響應時間的一少部分。但在大量的併發的 I/O 時纔可能會使得 SYS CPU 有所增加
2.多線程搶佔系統資源
對於多個線程搶佔某一個系統調用的資源,會導致大量的線程等待->喚醒->搶佔,未搶到->等待...。導致不斷的切換線程 耗 費cpu。
3.頻繁GC
四、解決
不同情況引起的CPU飆高要需要不同的方式進行解決,需定位什麼原因造成的。