top
自帶的 top
命令類似於平時我們使用的任務管理器,能夠列出當前系統中的進程及資源的使用情況。
$ man top
top - display Linux tasks
使用起來很簡單,不加任何參數的情況下已經很實用了。其輸出大致是下面這個樣子:
按 q
可退出該界面。
Tips: top
的輸出每 3 秒刷新一次,如果想將畫面定格,Mac 下可使用 control + s 來停止刷新,control + q 恢復刷新。當然,還可以通過在當前界面按 d 來設置刷新頻率,如下圖。
下面來細看各部分的內容的含義。
top
關於機器運行的統計信息。從👈🏻至👉🏻依次是:
22:23:10
系統當前時間。up 80 days, 11:44
系統已經運行了80多天了。1 user
當前登錄的用戶數。1 個,也就是我自己。load average: 1.31, 1.33, 1.29
系統平均負荷(Load),三個值,分別表示過去 1 分鍾,5 分鍾和 15 分鍾的平均負荷。
Tasks
進程統計信息,分別是:
66 total
總計 66 個進程。1 running
其中 1 個正在運行。65 sleeping
65 個處於休眠。0 stopped
0 個停止。0 zombie
以及 0 個僵屍進程。
這里,其他都好理解,什么又是僵屍進程?簡單理解它是這么種進程,任務已經完成但沒有退出,仍然顯示在進程列表中。常見的情形是子進程,子進程中任務完成后,主進程還可能保持與其進行通信等。繼續了解可閱讀 What is Zombie Process in Linux?。
CPU
這一行是 CPU 使用情況的統計。分成了 8 個部分,他們相加后當然應該是 100% 啦。
100.0 us
:(user) 用戶消耗的 CPU 百分比。0.0 sy
:(system) 系統消耗的 CPU。0.0 ni
: nice 進程消耗的 CPU。0.0 id
:(idle) 空閑的 CPU。0.0 wa
:(waiting) 等待處理 I/O 操作的 CPU 資源。0.0 hi
:(Hardware IRQ)處理硬件交互的 CPU 資源。0.0 si
:(Software Interrupts)處理軟件交互的 CPU 資源。0.0 st
:(Steal Time)如果當前處於虛擬系統(vm)中,此項表示由管理程序從此系統偷走拿去處理其他任務的 CPU 資源。
其他好說,什么是 nice 進程。簡單理解,進程的 nice 值與 priority 都是標識進程優先級的,前者是用戶層面的優先級,后者是 Linux Kernel 使用的值。繼續了解可移步 Process 'niceness' vs. 'priority'。
Mem & Swap
這兩行表示物理內存(RAM)及 swap 空間的使用情況。拿內存這一行來說,依次表示:
606704 total
總內存89464 free
空閑的部分128300 used
使用的部分388940 buff/cache
buff 或緩存的部分
關於內存這部分,可閱讀此文章 Linux memory management 進一步了解詳情。
關於 swap 的理解可閱讀 All about Linux swap space。
進程列表
緊接着列出的是各進程,默認以 CPU 使用量排序。
PID
: 進程的 id,通過它來操作指定進程。USER
: 進程的所有者。PR
: 進程的優先級。NI
: 進程的NICE
值,默認 0。VIRT
: 進程使用的虛擬內存。RES
: 進程使用的物理內存。SHR
: 進程使用的共享內存。S
: status,進程的狀態: S=睡眠中/sleep R=支行中/running Z=僵屍進程/zombie (S)。%CPU
: 進程消耗的 CPU 百分比。%MEM
: 進程使用的 RAM 百分比。TIME+
: 進程運行時長。COMMAND
: 進程名。
以上。
大致了解后便不會感到眼花繚亂了。對於各指標含義了解后,可方便我們在服務端排查問題,分析程序運行是否可控和正常。比如你的 Node.js 服務。
一些 top 命令
除了展現信息,在 top 的輸出界面,還有很多命令可用,比如上面提到的 d 設置刷新時間。
- 最常用的,發現某個進程快把機器爆掉了,按 k 然后輸入其 PID 將該進程結束掉。
- o 調整各列的順序/order。
- u 展示某個用戶的進程。再次進入設置時設置成空則回到展示全部進程。
- z 高亮運行中的進程。
- c 展示進程的絕對路徑。
htop
除了自帶的 top
命令,還可安裝另外一個加強版 htop
,其界面更加美觀,呈現的東西大同小異,但功能交互上更加方便強大。
$ htop
界面上友好的菜單已經無須多說便能上手。
其他相關命令
ps
: 列出當前活動的進程信息。iostat
:查看 CPU 統計信息及網絡或磁盤的 I/O 信息。vmstat
:查看虛機內存的使用情況。mpstat
:處理器相關的統計信息。mpstat
:處理器相關的統計信息。sar
:系統活動信息(system activity report,這全稱是我猜測的)。perf
:性能分析工具。