Linux 下 top 命令詳解

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容