
top命令用于監(jiān)控Linux上用戶進(jìn)程以及系統(tǒng)資源的使用情況,它是網(wǎng)管工具箱中最實(shí)用的工具之一。top命令已經(jīng)預(yù)裝到Linux系統(tǒng)中了,它有一定的交互功能,你可以通過(guò)它瀏覽進(jìn)程列表、關(guān)閉進(jìn)程等操作
<font color=CornflowerBlue>概述</font>
top命令可以輸出正在運(yùn)行中的進(jìn)程列表,并且每隔幾秒鐘自動(dòng)更新列表中各個(gè)進(jìn)程的狀態(tài)
默認(rèn)情況下,列表是按照CPU的使用率由高到低來(lái)排序的,所以可以很輕松的觀察到哪個(gè)用戶的哪個(gè)進(jìn)程占用了最多的系統(tǒng)資源,默認(rèn)排序列是可以修改的,這個(gè)在后面的段落中會(huì)說(shuō)到。
我們只需要在終端輸入top 并回車,就進(jìn)入了命令行模式,輸出下圖所示的總覽信息以及進(jìn)程列表,按 Q 或者 Ctrl + Z 退出命令行模式

上圖中,上半部分是系統(tǒng)的總覽信息,包括:系統(tǒng)信息、內(nèi)存使用、任務(wù)信息、CPU使用、平均負(fù)載、進(jìn)程列表
<font color=CornflowerBlue>系統(tǒng)信息</font>

如上圖所示,在屏幕的左上角的頂部的紅框部分,顯示了當(dāng)前時(shí)間、系統(tǒng)運(yùn)行時(shí)間(系統(tǒng)已經(jīng)運(yùn)行了多久)以及用戶會(huì)話數(shù)(當(dāng)前登錄了幾個(gè)會(huì)話)
由圖可知,當(dāng)前時(shí)間是 21:06:40 ,系統(tǒng)已經(jīng)連續(xù)運(yùn)行了3天2小時(shí)21分鐘,當(dāng)前有有兩個(gè)會(huì)話登錄了系統(tǒng)
在終端中輸入 who并回車, 查看當(dāng)前活躍會(huì)話,具體輸出如下:
[root@ecs-centos-7 ~]# who
root pts/0 2020-08-11 23:45 (112.97.60.180)
root pts/1 2020-08-12 00:24 (112.97.60.180)`
<font color=CornflowerBlue>內(nèi)存使用</font>

圖中紅框區(qū)域是關(guān)于系統(tǒng)內(nèi)存使用情況, Mem 和 Swap 分別表示物理內(nèi)存和交換空間
內(nèi)存 | total | free | used | buff/cache
---|---|---|---|---|---
Mem | 總物理內(nèi)存 | 空閑內(nèi)存 | 已經(jīng)使用的內(nèi)存 | 內(nèi)核緩沖區(qū)以及頁(yè)緩存
Swap | 總的交換空間 | 空閑交換空間 | 已經(jīng)使用的交換空間 | 空
<font color=CornflowerBlue>任務(wù)信息</font>

任務(wù)區(qū)域展示的是系統(tǒng)中進(jìn)程的統(tǒng)計(jì)信息,下面是各個(gè)參數(shù)的說(shuō)明
total: 總的進(jìn)程數(shù)
running: 正在運(yùn)行的進(jìn)程數(shù)
sleeping: 睡眠中的進(jìn)程數(shù)
stopped: 已經(jīng)停止的進(jìn)程數(shù)
zombile: 僵尸進(jìn)程數(shù)
上圖中,總共有82個(gè)進(jìn)程,2個(gè)正在運(yùn)行,80個(gè)處于睡眠狀態(tài),沒(méi)有已經(jīng)停止的進(jìn)程,也沒(méi)有僵尸進(jìn)程
<font color=CornflowerBlue>CPU使用</font>

CPU百分比部分顯示了在各種任務(wù)上花費(fèi)的CPU時(shí)間的百分比
us: CPU再用戶空間中執(zhí)行進(jìn)程花費(fèi)的時(shí)間
sy: CPU再內(nèi)核空間中運(yùn)行花費(fèi)的時(shí)間
ni: nice值,Linux系統(tǒng)使用 nice值決定進(jìn)程優(yōu)先級(jí),值越大進(jìn)程優(yōu)先級(jí)越低,值越小優(yōu)先級(jí)越高
id:CPU保持空閑的時(shí)間
wa: CPU等待IO完成花費(fèi)的時(shí)間
hi: CPU處理硬中斷花費(fèi)的時(shí)間
si: CPU處理軟中斷花費(fèi)的時(shí)間
st: 因CPU在其他虛擬機(jī)上繁忙而無(wú)法執(zhí)行當(dāng)前任務(wù)所浪費(fèi)的時(shí)間
<font color=CornflowerBlue>平均負(fù)載</font>

上圖中紅框區(qū)域是系統(tǒng)平均負(fù)載,分別表示一分鐘、五分鐘、十五分鐘的平均負(fù)載,負(fù)載是系統(tǒng)執(zhí)行計(jì)算工作量的度量
在單核系統(tǒng)中,假如平均負(fù)載是 0.6,表示系統(tǒng)處于 60% 負(fù)荷的狀態(tài)
平均負(fù)載是 1,表示系統(tǒng)正處于滿負(fù)荷狀態(tài),這個(gè)時(shí)候如果再增加哪怕一點(diǎn)點(diǎn)的負(fù)荷就可以使系統(tǒng)過(guò)載
當(dāng)平均負(fù)載達(dá)到 2 時(shí),表示其過(guò)載超過(guò)其負(fù)荷的 100%
在多核系統(tǒng)上,CPU核數(shù)就是系統(tǒng)負(fù)載的上限,比如:一臺(tái) 4 核機(jī)器上負(fù)載上限就是 4
<font color=CornflowerBlue>進(jìn)程列表</font>
下圖中紅框區(qū)域是系統(tǒng)中的進(jìn)程列表

進(jìn)程列表列說(shuō)明:
- PID
進(jìn)程ID,標(biāo)識(shí)每個(gè)進(jìn)程的唯一ID
- USER
進(jìn)程是由哪個(gè)用戶啟動(dòng)的
- PR、NI
PR字段從內(nèi)核的角度顯示進(jìn)程調(diào)度優(yōu)先級(jí)
NI 字段是前面介紹的進(jìn)程nice值,會(huì)影響進(jìn)程的優(yōu)先級(jí)
- VIRT、RES、SHR、 %MEM
這幾個(gè)參數(shù)都是和進(jìn)程內(nèi)存消耗相關(guān)
VIRT
是進(jìn)程內(nèi)存占用的總大小,包括程序代碼,進(jìn)程中存儲(chǔ)數(shù)據(jù)以及被換出到磁盤(pán)中的內(nèi)存頁(yè)
RES 是進(jìn)程占用的物理內(nèi)存大小
%MEM 是進(jìn)程占用物理內(nèi)存的百分比,可以通過(guò)下面的公式計(jì)算得到
==%MEM = 實(shí)際的物理內(nèi)存大小 / RES大小==
SHR 是進(jìn)程間共享內(nèi)存的大小
- S
進(jìn)程狀態(tài),前面 ==任務(wù)信息== 段落提到了進(jìn)程的幾種狀態(tài),分別是:運(yùn)行狀態(tài)、睡眠狀態(tài)、停止?fàn)顟B(tài)、僵尸狀態(tài)
- %CPU
進(jìn)程占用的CPU百分比
- TIME+
進(jìn)程從啟動(dòng)到當(dāng)前為止占用CPU的總時(shí)間,能精確到0.01秒
- COMMAND
顯示進(jìn)程名稱
<font color=CornflowerBlue>啟動(dòng)、關(guān)閉 top 命令行</font>
在終端中輸入 top 按回車鍵,即可啟動(dòng) top 的命令行,
按 Q 鍵或 者Ctrl + Z 鍵可退出命令行模式
還有一種退出方式,在終端中輸入 top -n 5 命令,待進(jìn)入命令行,更新5次數(shù)據(jù)之后會(huì)自動(dòng)退出命令行
<font color=CornflowerBlue>顯示指定用戶進(jìn)程</font>
終端中輸入 top -u 用戶名 或者 top U 用戶名就可以顯示指定用戶的進(jìn)程列表,下面的例子是顯示 root 用戶的進(jìn)程列表, 具體如下所示:
[root@ecs-centos-7 ~]# top -u root
top - 00:36:50 up 4 days, 5:51, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 83 total, 1 running, 82 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 3.1 sy, 0.0 ni, 96.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881544 total, 1130088 free, 358548 used, 392908 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1370264 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125372 3764 2580 S 0.0 0.2 0:02.76 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:02.77 kworker/u4:0
6 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
<font color=CornflowerBlue>顯示指定進(jìn)程ID的進(jìn)程</font>
終端上輸入 top -p 進(jìn)程ID可以顯示指定進(jìn)程ID的進(jìn)程,下面的例子顯示進(jìn)程ID為 1 的進(jìn)程,具體輸出如下所示:
[root@ecs-centos-7 ~]# top -p 1
top - 00:42:50 up 4 days, 5:57, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881544 total, 1130460 free, 358172 used, 392912 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1370640 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125372 3764 2580 S 0.0 0.2 0:02.76 systemd
終端上輸入 top -p 進(jìn)程ID1,進(jìn)程ID2,進(jìn)程ID3 可以顯示 進(jìn)程ID1,進(jìn)程ID2,進(jìn)程ID3 這三個(gè)進(jìn)程,具體輸出如下所示:
[root@ecs-centos-7 ~]# top -p 1,2,4
top - 00:43:50 up 4 days, 5:58, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 3 total, 0 running, 3 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881544 total, 1130576 free, 358048 used, 392920 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1370760 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125372 3764 2580 S 0.0 0.2 0:02.76 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
<font color=CornflowerBlue>顯示完整命令</font>
有時(shí)候需要查看 COMMAND 列的完整命令, top -c 命令可以達(dá)到目的
[root@ecs-centos-7 ~]# top -c
top - 00:54:32 up 4 days, 6:09, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 83 total, 1 running, 82 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1881544 total, 1130072 free, 358532 used, 392940 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1370272 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 125372 3764 2580 S 0.0 0.2 0:02.76 /usr/lib/systemd/systemd --switched-root --system --deserialize +
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [kthreadd]
從上面的例子中可以看出,進(jìn)程ID為1的進(jìn)程 COMMAND 列顯示了完整的命令
<font color=CornflowerBlue>設(shè)置刷新頻率</font>
進(jìn)入top的命令行模式后,默認(rèn)是3s左右會(huì)刷新一次,我們可以使用 top -d 刷新的秒數(shù) 來(lái)設(shè)置刷新的頻率,比如 top -d 5 命令是設(shè)置每5s刷新一次
<font color=CornflowerBlue>多核CPU監(jiān)控</font>
在top命令行模式下,按鍵盤(pán)數(shù)字 ==1== ,可以監(jiān)控每個(gè)邏輯CPU的信息

上圖中綠色框里是查詢邏輯CPU的數(shù)量,紅色框是每一個(gè)邏輯 CPU 信息
從圖中可知,當(dāng)前機(jī)器有 2 個(gè)邏輯CPU,%CPU0 和 %CPU1 分別是兩個(gè)邏輯 CPU 的信息
<font color=CornflowerBlue>進(jìn)程排序</font>
默認(rèn)是按照 %CPU 列 也即CPU的百分比占用來(lái)排序的,可以通過(guò) Shift + > 或 Shift + < 向右或向左改變排序的列

在上面的動(dòng)畫(huà)中,進(jìn)入top命令行之后,默認(rèn)是以 %CPU 列排序的,按一次 Shift + > 鍵右移排序的列,新的排序列變成了 %MEM