一天一個 Linux 命令(33):top 命令


一、簡介

Linux下的top是一款常用的性能分析工具的命令。能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。

top命令可以動態顯示系統中各個進程的資源,而且可以通過用戶按鍵來不斷刷新當前狀態.如果在前台執行該命令,它將獨占前台,直到用戶終止該程序為止.比較准確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.內存使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定.

二、格式說明

top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

top [參數]

三、選項說明

-d	改變顯示的更新速度,或是在交談式指令列( interactive command)按 s
-q	沒有任何延遲的顯示速度,如果使用者是有 superuser 的權限,則 top 將會以最高的優先序執行
-c 	切換顯示模式
-s	安全模式,將交談式指令取消, 避免潛在的危機
-S 累積模式,會將己完成或消失的子進程 ( dead child process ) 的 CPU time 累積起來
-i	不顯示任何閑置 (idle) 或無用 (zombie) 的行程
-n	更新的次數,完成后將會退出 top
-b	批次檔模式,搭配 “n” 參數一起使用,可以用來將 top 的結果輸出到檔案內

四、命令功能

用於實時顯示系統中各個進程的資源占用狀況。

五、常見用法

5.1 顯示進程信息

# top

 

 

 

說明:

第一行:任務隊列信息,同 uptime 命令的執行結果

15: 36: 28 當前系統時間

up 222 days, 20:35 系統已經運行了222天20小時35分鍾(在這期間系統沒有重啟過!)

1 user 當前有1個用戶登錄系統

load average: 0.00, 0.02, 0.05 load average后面的三個數分別是1分鍾、5分鍾、15分鍾的負載情況

load average數據是每隔5秒鍾檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。

第二行:Tasks — 任務(進程)

系統現在共有152個進程,其中處於運行中的有1個,151個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵屍)的有0個。

第三行:cpu狀態信息

us, user    : time running un-niced user processes
sy, system  : time running kernel processes
ni, nice    : time running niced user processes
id, idle    : time spent in the kernel idle handler
wa, IO-wait : time waiting for I/O completion
hi : time spent servicing hardware interrupts
si : time spent servicing software interrupts
st : time stolen from this vm by the hypervisor

0.2 us 用戶空間占用CPU的百分比

0.2 sy 內核空間占用CPU的百分比

0.0 ni 改變過優先級的進程占用CPU的百分比

99.3 id 空閑CPU百分比

0.0 wa IO等待占用CPU的百分比

0.0 hi 硬中斷(Hardware IRQ)占用CPU的百分比

0.0 si 軟中斷(Software Interrupts)占用CPU的百分比

0.0 st虛擬機占用百分比, 也就是說當前VM中的cpu cycle被虛擬化占用的百分比

第四行:內存狀態

8008656 total 物理內存總量

467632 free 使用中的內存總量

2209040 used 空閑內存總量

5331984 buff/cache 緩存的內存量

第五行:swap交換分區信息

0 total 交換區總量

0 free 使用的交換區總量

0 used 空閑交換區總量

5493404 avail Mem 緩沖的交換區總量

注意:

第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,空閑內存總量(free)是內核還未納入其管控范圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核並不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。

如果出於習慣去計算可用內存數,這里有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的cached,按這個公式此台服務器的可用內存:467632+5331984 +5493404 = 11293020,大約11個G。

對於內存監控,在top里我們要時刻監控第五行swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。

第六行:空行

第七行及以下:各進程(任務)的狀態監控

PID 進程id

USER 進程所有者

PR 進程優先級

NI nice值。負值表示高優先級,正值表示低優先級

VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES

RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA

SHR 共享內存大小,單位kb

S 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程

%CPU 上次更新到現在的CPU時間占用百分比

%MEM 進程使用的物理內存百分比

TIME+ 進程使用的CPU時間總計,單位1/100秒

COMMAND 進程名稱(命令名/命令行)

其他使用說明

在top執行后,進行以下操作,可以得到不同的數據顯示

1.多U多核CPU監控

按鍵盤數字"1",可監控每個邏輯CPU的狀況

 

 

 

我們可以看出服務器有4個邏輯CPU,實際上是1個物理CPU。再按數字鍵1,就會返回到top基本視圖界面。

如果想看cpu相關信息,可以在文件 /proc/cpuinfo查看

物理cpu數

# grep "physical id" /proc/cpuinfo | sort | uniq | wc -l

cpu 核數

# grep 'cpu cores' /proc/cpuinfo | uniq | awk -F':' '{print $2}'

邏輯cpu數

# grep 'processor' /proc/cpuinfo | sort | wc -l

2.高亮顯示當前運行進程

敲擊鍵盤“b”(打開/關閉加亮效果),top的視圖變化如下:

 

 

 

我們發現進程id為15417的"top"進程被加亮了,top進程就是視圖第三行顯示的進程,可以通過敲擊“y”鍵關閉或打開運行態進程的加亮效果。

3.進程字段排序

進入top時,各進程是按照CPU的占用量來排序的,在下圖中進程ID為11209的dockerd進程排在第一(cpu占用0.7%),進程ID為582的systemd-resolve進程排在第二(cpu占用0.3%)

 

 

 

敲擊鍵盤“x”(打開/關閉排序列的加亮效果),top的視圖變化如下

 

 

 

top默認的排序列是“%CPU”。

4. 通過”shift + >”或”shift + <”可以向右或左改變排序列

下圖是按一次”shift + >”的效果圖,視圖現在已經按照%MEM來排序。

 

 

 

5.top交互命令

在top 命令執行過程中可以使用的一些交互命令。這些命令都是單字母的,如果在命令行中使用了s 選項, 其中一些命令可能會被屏蔽。

h 顯示幫助畫面,給出一些簡短的命令總結說明

k 終止一個進程。

i 忽略閑置和僵死進程。這是一個開關式命令。

q 退出程序

r 重新安排一個進程的優先級別

S 切換到累計模式

s 改變兩次刷新之間的延遲時間(單位為s),如果有小數,就換算成m s。輸入0值則系統將不斷刷新,默認值是5 s

f或者F 從當前顯示中添加或者刪除項目

o或者O 改變顯示項目的順序

l 切換顯示平均負載和啟動時間信息

m 切換顯示內存信息

t 切換顯示進程和CPU狀態信息

c 切換顯示命令名稱和完整命令行

M 根據駐留內存大小進行排序

P 根據CPU使用百分比大小進行排序

T 根據時間/累計時間進行排序

W 將當前設置寫入~/.toprc文件中 

5.2 顯示完整命令

# top -c

5.3 以批處理模式顯示程序信息

# top -b

5.4 以累積模式顯示程序信息

# top -S

5.5 設置信息更新次數

#表示更新兩次后終止更新顯示top -n 2

5.6 設置信息更新時間

#表示更新周期為3秒,每3秒刷新一次# top -d 3

5.7 顯示指定的進程信息

#顯示進程號為139的進程信息,CPU、內存占用率等# top -p 139

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM