top時S列爲進程的狀態:
R:運行狀態
i:空閒狀態
D:不可中斷狀態,進程正在和硬件交互,爲了保護硬件,處於不可中斷狀態。
Z:殭屍狀態,實際上進程已經結束,但父進程沒有回收資源。
S:睡眠狀態,可中斷。
T:暫停狀態,進程收到SIN_STOP信號暫停。調試加斷點的時候,進程就處於這種狀態。
X:進程已經掛掉。
大量不可中斷狀態,系統或硬件出現故障,可能會出現,檢查IO問題。
殭屍狀態:
1、父進程創建子進程後,沒有調用wait等待,
2、子進程結束會給父進程發送sig_children,父進程沒有接受此sig_children處理。
3、或者子進程結束太快,父進程沒得及做以上2步操作。
當父進程結束,殭屍子進程會被init回收。
當父進程長期不結束,殭屍子進程也會長期存在。
dstat 查看系統的IO情況。
信號中斷(軟中斷)
本質上是一種異步處理機制。
中斷被分成上下兩部分處理。
上部分:硬中斷,直接處理硬件情況,反應很快。
下部分:軟中斷,爲內核線程,反應相對不如上中斷快。
每個CPU都有1個軟中斷內核線程,名字爲ksoftirqd/0 。
硬中斷一般對應各種IO問題。
軟中斷髮生頻率過高,內核線程會因爲CPU使用率過高,導致軟中斷處理不及時,造成各種問題,像網絡延時,調度緩慢等性能問題。