名詞解釋
- 殭屍程式:正常情況下,當一個程式建立了子程式後,它應該通過系統呼叫 wait() 或者 waitpid() 等待子程式結束,回收子程式的資源;而子程式在結束時,會向它的父程式傳送 SIGCHLD 訊號,所以,父程式還可以註冊 SIGCHLD 訊號的處理函式,非同步回收資源。如果父程式沒這麼做,或是子程式執行太快,父程式還沒來得及處理子程式狀態,子程式就已經提前退出,那這時的子程式就會變成殭屍程式。通常,殭屍程式持續的時間都比較短,在父程式回收它的資源後就會消亡;或者在父程式退出後,由 init 程式回收後也會消亡。
- 不可中斷狀態: 表示程式正在跟硬體互動,為了保護程式資料和硬體的一致性,系統不允許其他程式或中斷打斷這個程式。程式長時間處於不可中斷狀態,通常表示系統有 I/O 效能問題。
答疑
- 下面是一個 top 命令輸出的示例,S 列(也就是 Status 列)表示程式的狀態。從這個示例裡,你可以看到 R、D、Z、S、I 等幾個狀態,它們分別是什麼意思呢?
#top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28961 root 20 0 43816 3148 4040 R 3.2 0.0 0:00.01 top 620 root 20 0 37280 33676 908 D 0.3 0.4 0:00.01 app 1 root 20 0 160072 9416 6752 S 0.0 0.1 0:37.64 systemd 1896 root 20 0 0 0 0 Z 0.0 0.0 0:00.00 devapp 2 root 20 0 0 0 0 S 0.0 0.0 0:00.10 kthreadd 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 0:06.37 ksoftirqd/0
- R 是 Running 或 Runnable 的縮寫,表示程式在 CPU 的就緒佇列中,正在執行或者正在等待執行。
- D 是 Disk Sleep 的縮寫,也就是不可中斷狀態睡眠(Uninterruptible Sleep),一般表示程式正在跟硬體互動,並且互動過程不允許被其他程式或中斷打斷
- Z 是 Zombie 的縮寫,如果你玩過“植物大戰殭屍”這款遊戲,應該知道它的意思。它表示殭屍程式,也就是程式實際上已經結束了,但是父程式還沒有回收它的資源(比如程式的描述符、PID 等)。
- S 是 Interruptible Sleep 的縮寫,也就是可中斷狀態睡眠,表示程式因為等待某個事件而被系統掛起。當程式等待的事件發生時,它會被喚醒並進入 R 狀態
- I 是 Idle 的縮寫,也就是空閒狀態,用在不可中斷睡眠的核心執行緒上。前面說了,硬體互動導致的不可中斷程式用 D 表示,但對某些核心執行緒來說,它們有可能實際上並沒有任何負載,用 Idle 正是為了區分這種情況。要注意,D 狀態的程式會導致平均負載升高, I 狀態的程式卻不會
小工具與技巧
dstat ,它的好處是,可以同時檢視 CPU 和 I/O 這兩種資源的使用情況,便於對比分析
# 間隔1秒輸出10組資料
$ dstat 1 10
You did not select any stats, using -cdngy by default.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
0 0 96 4 0|1219k 408k| 0 0 | 0 0 | 42 885
0 0 2 98 0| 34M 0 | 198B 790B| 0 0 | 42 138
0 0 0 100 0| 34M 0 | 66B 342B| 0 0 | 42 135
0 0 84 16 0|5633k 0 | 66B 342B| 0 0 | 52 177
0 3 39 58 0| 22M 0 | 66B 342B| 0 0 | 43 144
0 0 0 100 0| 34M 0 | 200B 450B| 0 0 | 46 147
0 0 2 98 0| 34M 0 | 66B 342B| 0 0 | 45 134
0 0 0 100 0| 34M 0 | 66B 342B| 0 0 | 39 131
0 0 83 17 0|5633k 0 | 66B 342B| 0 0 | 46 168
0 3 39 59 0| 22M 0 | 66B 342B| 0 0 | 37 134
本作品採用《CC 協議》,轉載必須註明作者和本文連結