要想知道目前的系統的軟中斷情況,我們可以使用
top
指令檢視,下面是一台伺服器上的 top 的資料:

上圖中的黃色部分
si
,就是 CPU 在軟中斷上的使用率,而且可以發現,每個 CPU 使用率都不高,兩個 CPU 的使用率雖然隻有 3% 和 4% 左右,但是都是用在軟中斷上了。
另外,也可以看到 CPU 使用率最高的程序也是軟中斷
ksoftirqd
,是以可以認為此時系統的開銷主要來源于軟中斷。
如果要知道是哪種軟中斷類型導緻的,我們可以使用
watch -d cat /proc/softirqs
指令檢視每個軟中斷類型的中斷次數的變化速率。
一般對于網絡 I/O 比較高的 Web 伺服器,
NET_RX
網絡接收中斷的變化速率相比其他中斷類型快很多。
如果發現
NET_RX
網絡接收中斷次數的變化速率過快,接下來就可以使用
sar -n DEV
檢視網卡的網絡包接收速率情況,然後分析是哪個網卡有大量的網絡包進來。
接着,在通過
tcpdump
抓包,分析這些包的來源,如果是非法的位址,可以考慮加防火牆,如果是正常流量,則要考慮硬體更新等。
中斷總結
為了避免由于中斷處理程式執行時間過長,而影響正常程序的排程,Linux 将中斷處理程式分為上半部和下半部:
- 上半部,對應硬中斷,由硬體觸發中斷,用來快速進行中斷;
- 下半部,對應軟中斷,由核心觸發中斷,用來異步處理上半部未完成的工作;
Linux 中的軟中斷包括網絡收發、定時、排程、RCU 鎖等各種類型,可以通過檢視 /proc/softirqs 來觀察軟中斷的累計中斷次數情況,如果要實時檢視中斷次數的變化率,可以使用 watch -d cat /proc/softirqs 指令。