天天看點

14、如何定位軟中斷 CPU 使用率過高的問題?

要想知道目前的系統的軟中斷情況,我們可以使用 ​

​top​

​ 指令檢視,下面是一台伺服器上的 top 的資料:

14、如何定位軟中斷 CPU 使用率過高的問題?

上圖中的黃色部分 ​

​si​

​,就是 CPU 在軟中斷上的使用率,而且可以發現,每個 CPU 使用率都不高,兩個 CPU 的使用率雖然隻有 3% 和 4% 左右,但是都是用在軟中斷上了。

另外,也可以看到 CPU 使用率最高的程序也是軟中斷 ​

​ksoftirqd​

​,是以可以認為此時系統的開銷主要來源于軟中斷。

如果要知道是哪種軟中斷類型導緻的,我們可以使用 ​

​watch -d cat /proc/softirqs​

​ 指令檢視每個軟中斷類型的中斷次數的變化速率。

14、如何定位軟中斷 CPU 使用率過高的問題?

一般對于網絡 I/O 比較高的 Web 伺服器,​

​NET_RX​

​ 網絡接收中斷的變化速率相比其他中斷類型快很多。

如果發現 ​

​NET_RX​

​​ 網絡接收中斷次數的變化速率過快,接下來就可以使用 ​

​sar -n DEV​

​ 檢視網卡的網絡包接收速率情況,然後分析是哪個網卡有大量的網絡包進來。

14、如何定位軟中斷 CPU 使用率過高的問題?

接着,在通過 ​

​tcpdump​

​ 抓包,分析這些包的來源,如果是非法的位址,可以考慮加防火牆,如果是正常流量,則要考慮硬體更新等。

中斷總結

為了避免由于中斷處理程式執行時間過長,而影響正常程序的排程,Linux 将中斷處理程式分為上半部和下半部:

  • 上半部,對應硬中斷,由硬體觸發中斷,用來快速進行中斷;
  • 下半部,對應軟中斷,由核心觸發中斷,用來異步處理上半部未完成的工作;

Linux 中的軟中斷包括網絡收發、定時、排程、RCU 鎖等各種類型,可以通過檢視 /proc/softirqs 來觀察軟中斷的累計中斷次數情況,如果要實時檢視中斷次數的變化率,可以使用 watch -d cat /proc/softirqs 指令。

繼續閱讀