每天一個linux命令(ling)(44):top命令(ling)
top命令(ling)是Linux下常用(yong)的(de)性(xing)能分析工具,能夠實時顯示系(xi)統中各(ge)個進程的(de)資源占用(yong)狀況,類似(si)于Windows的(de)任務(wu)管理器(qi)。下面詳(xiang)細介紹(shao)它的(de)使用(yong)方法。top是一個動態顯(xian)示(shi)過(guo)程(cheng),即可(ke)以(yi)通(tong)(tong)過(guo)用(yong)戶(hu)(hu)按鍵來(lai)不斷(duan)刷新當前(qian)狀態.如果(guo)在前(qian)臺執(zhi)行(xing)該命(ming)(ming)令(ling)(ling),它將獨占前(qian)臺,直到用(yong)戶(hu)(hu)終止(zhi)該程(cheng)序為止(zhi).比(bi)較準確的(de)說(shuo),top命(ming)(ming)令(ling)(ling)提供了實(shi)時的(de)對系統(tong)處(chu)理器(qi)的(de)狀態監視(shi).它將顯(xian)示(shi)系統(tong)中(zhong)CPU最“敏感(gan)”的(de)任務(wu)列表.該命(ming)(ming)令(ling)(ling)可(ke)以(yi)按CPU使(shi)用(yong).內存(cun)使(shi)用(yong)和執(zhi)行(xing)時間對任務(wu)進(jin)行(xing)排序;而且該命(ming)(ming)令(ling)(ling)的(de)很多特(te)性都可(ke)以(yi)通(tong)(tong)過(guo)交互式命(ming)(ming)令(ling)(ling)或者在個人定制文件中(zhong)進(jin)行(xing)設定.
1.命令格式:
top [參(can)數]
2.命令功能:
顯(xian)示當前系統正在執行的(de)(de)進程的(de)(de)相關信(xin)息,包括(kuo)進程ID、內存占(zhan)用率、CPU占(zhan)用率等
3.命令參數:
-b 批處理(li)
-c 顯示完整的治命令
-I 忽(hu)略失效過(guo)程
-s 保密模式
-S 累積模式
-i<時(shi)間> 設置間隔時(shi)間
-u<用戶名(ming)> 指(zhi)定用戶名(ming)
-p<進程號> 指定進程
-n<次數> 循(xun)環顯(xian)示的次數
4.使(shi)用實例:
實(shi)例(li)1:顯示進程信(xin)息(xi)
命令:
top
輸出:
[root@TG1704 log]# top
top - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35
Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9%us, 3.4%sy, 0.0%ni, 90.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 32949016k total, 14411180k used, 18537836k free, 169884k buffers
Swap: 32764556k total, 0k used, 32764556k free, 3612636k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28894 root 22 0 1501m 405m 10m S 52.2 1.3 2534:16 java
18249 root 18 0 3201m 1.9g 11m S 35.9 6.0 569:39.41 java
2808 root 25 0 3333m 1.0g 11m S 24.3 3.1 526:51.85 java
25668 root 23 0 3180m 704m 11m S 14.0 2.2 360:44.53 java
574 root 25 0 3168m 611m 10m S 12.6 1.9 556:59.63 java
1599 root 20 0 3237m 1.9g 11m S 12.3 6.2 262:01.14 java
1008 root 21 0 3147m 842m 10m S 0.3 2.6 4:31.08 java
13823 root 23 0 3031m 2.1g 10m S 0.3 6.8 176:57.34 java
28218 root 15 0 12760 1168 808 R 0.3 0.0 0:01.43 top
29062 root 20 0 1241m 227m 10m S 0.3 0.7 2:07.32 java
1 root 15 0 10368 684 572 S 0.0 0.0 1:30.85 init
2 root RT -5 0 0 0 S 0.0 0.0 0:01.01 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
5 root RT -5 0 0 0 S 0.0 0.0 0:00.80 migration/1
6 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1
7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1
8 root RT -5 0 0 0 S 0.0 0.0 0:20.59 migration/2
9 root 34 19 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/2
10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/2
11 root RT -5 0 0 0 S 0.0 0.0 0:23.66 migration/3
12 root 34 19 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/3
13 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/3
14 root RT -5 0 0 0 S 0.0 0.0 0:20.29 migration/4
15 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/4
16 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/4
17 root RT -5 0 0 0 S 0.0 0.0 0:23.07 migration/5
18 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/5
19 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/5
20 root RT -5 0 0 0 S 0.0 0.0 0:17.16 migration/6
21 root 34 19 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/6
22 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/6
23 root RT -5 0 0 0 S 0.0 0.0 0:58.28 migration/7
說明:
統(tong)計信息(xi)區:
前五行是當前系(xi)統(tong)情況整體的統計信(xin)息區。下面我們看每一(yi)行信息的具體(ti)意義。
第(di)一行,任務(wu)隊(dui)列信息,同 uptime 命令的執行結(jie)果,具(ju)體參數說(shuo)明(ming)情況如(ru)下:
14:06:23 — 當(dang)前系統(tong)時間
up 70 days, 16:44 — 系統已(yi)經運行了70天16小時(shi)44分鐘(zhong)(在這(zhe)期間系統沒有重啟過的(de)吆!)
2 users — 當前有2個(ge)用戶登錄系(xi)統
load average: 1.15, 1.42, 1.44 — load average后面的(de)三(san)個數分(fen)別是(shi)1分(fen)鐘(zhong)(zhong)、5分(fen)鐘(zhong)(zhong)、15分(fen)鐘(zhong)(zhong)的(de)負載情況。
load average數(shu)(shu)據是每隔5秒鐘檢查一次(ci)活躍的進程數(shu)(shu),然后按特定算(suan)(suan)法計算(suan)(suan)出(chu)的數(shu)(shu)值。如果這(zhe)個數(shu)(shu)除以邏輯CPU的數(shu)(shu)量,結果高于5的時候(hou)就(jiu)表明系(xi)統在超負荷(he)運轉了。
第二行,Tasks — 任務(進程),具體信息說明如下:
系(xi)統現在共(gong)有206個(ge)進程,其中處于運行中的有1個(ge),205個在休眠(sleep),stoped狀態的有(you)(you)0個,zombie狀態(僵(jiang)尸(shi))的有(you)(you)0個。
第(di)三行(xing),cpu狀態信息,具體(ti)(ti)屬(shu)性說(shuo)明如下:
5.9%us — 用戶(hu)空間占用CPU的百分(fen)比。
3.4% sy — 內核(he)空(kong)間占用CPU的百分比。
0.0% ni — 改變過優先級的進程占用CPU的百分比
90.4% id — 空閑CPU百分(fen)比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中斷(Hardware IRQ)占(zhan)用CPU的百分比
0.2% si — 軟中(zhong)斷(Software Interrupts)占用CPU的百分比
備注:在這里CPU的使用比率和windows概(gai)念不同,需要理解(jie)linux系統用戶空(kong)間和內核(he)空(kong)間的相關知(zhi)識!
第四(si)行,內存狀態(tai),具(ju)體信(xin)息如下:
32949016k total — 物理內存總量(32GB)
14411180k used — 使用中的內存總(zong)量(14GB)
18537836k free — 空閑內存總(zong)量(18GB)
169884k buffers — 緩存的內存量(liang) (169M)
第(di)五行,swap交換(huan)分區(qu)信息,具體信息說明如下(xia):
32764556k total — 交(jiao)換區總量(32GB)
0k used — 使用的交(jiao)換(huan)區總量(0K)
32764556k free — 空閑交(jiao)換區總量(32GB)
3612636k cached — 緩沖(chong)的(de)交換(huan)區總量(3.6GB)
備(bei)注:
第四行中(zhong)使(shi)用(yong)(yong)中(zhong)的(de)內(nei)(nei)(nei)存總(zong)量(used)指(zhi)的(de)是現在(zai)系統內(nei)(nei)(nei)核控制的(de)內(nei)(nei)(nei)存數,空閑內(nei)(nei)(nei)存總(zong)量(free)是內(nei)(nei)(nei)核還未納(na)入其管控范圍的(de)數量。納(na)入內(nei)(nei)(nei)核管理的(de)內(nei)(nei)(nei)存不見(jian)得都在(zai)使(shi)用(yong)(yong)中(zhong),還包括過去(qu)使(shi)用(yong)(yong)過的(de)現在(zai)可以被重復利(li)用(yong)(yong)的(de)內(nei)(nei)(nei)存,內(nei)(nei)(nei)核并(bing)不把這些(xie)可被重新(xin)使(shi)用(yong)(yong)的(de)內(nei)(nei)(nei)存交還到free中(zhong)去(qu),因此(ci)在(zai)linux上(shang)free內(nei)(nei)(nei)存會越來越少,但不用(yong)(yong)為此(ci)擔(dan)心。
如果出于習(xi)慣去計算(suan)可用內存數,這(zhe)里有個(ge)近似的(de)(de)計算(suan)公(gong)式:第(di)四行的(de)(de)free + 第(di)四行的(de)(de)buffers + 第(di)五(wu)行的(de)(de)cached,按這(zhe)個(ge)公(gong)式此臺服務器的(de)(de)可用內存:18537836k +169884k +3612636k = 22GB左(zuo)右(you)。
對(dui)于內存監控(kong),在(zai)(zai)top里我們要時刻監控(kong)第五行(xing)swap交換分區的(de)(de)used,如果這(zhe)個(ge)數值在(zai)(zai)不(bu)斷(duan)的(de)(de)變化,說明內核在(zai)(zai)不(bu)斷(duan)進行(xing)內存和(he)swap的(de)(de)數據交換,這(zhe)是真正的(de)(de)內存不(bu)夠用了(le)。
第六行,空行。
第七行(xing)以下:各進(jin)程(任務(wu))的狀態(tai)監控,項目列信息說明如下:
PID — 進程(cheng)id
USER — 進(jin)程(cheng)所有者
PR — 進(jin)程優先級
NI — nice值(zhi)。負值(zhi)表(biao)示(shi)高優先(xian)級,正值(zhi)表(biao)示(shi)低優先(xian)級
VIRT — 進程(cheng)使用的虛擬內(nei)存總(zong)量(liang),單位(wei)kb。VIRT=SWAP+RES
RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR — 共享(xiang)內存大小,單位kb
S — 進程(cheng)狀(zhuang)(zhuang)態(tai)(tai)。D=不可中斷的睡眠狀(zhuang)(zhuang)態(tai)(tai) R=運行 S=睡眠 T=跟蹤/停(ting)止 Z=僵尸進程(cheng)
%CPU — 上次更新(xin)到現在(zai)的CPU時間占用百(bai)分(fen)比
%MEM — 進程使用的物(wu)理內存(cun)百分比(bi)
TIME+ — 進程使(shi)用的CPU時間(jian)總計,單位(wei)1/100秒
COMMAND — 進程名稱(命令名/命令行)
其(qi)他使(shi)用技(ji)巧:
1.多U多核CPU監控
在top基本視圖中(zhong),按鍵盤數字“1”,可監控每個邏(luo)輯CPU的狀況:
觀察上圖,服(fu)務器有16個邏(luo)輯CPU,實際(ji)上是4個物(wu)理CPU。再(zai)按數字鍵1,就會返回到top基(ji)本(ben)視(shi)圖(tu)界面。
2.高亮(liang)顯示當前(qian)運(yun)行進(jin)程
敲擊鍵盤“b”(打開/關閉加亮效果),top的視圖變化如下:
我們發現進(jin)(jin)程(cheng)id為2570的“top”進(jin)(jin)程(cheng)被加亮了,top進(jin)(jin)程(cheng)就是視圖(tu)第二(er)行(xing)(xing)顯示的唯一的運行(xing)(xing)態(tai)(runing)的那個進(jin)(jin)程(cheng),可以通(tong)過敲擊“y”鍵關(guan)閉或打開運行(xing)(xing)態(tai)進(jin)(jin)程(cheng)的加亮效果。
3.進程(cheng)字段排序
默認進入top時,各(ge)進程(cheng)是按(an)照CPU的占用(yong)量來(lai)排(pai)序的,在(zai)(zai)下圖中(zhong)進程(cheng)ID為(wei)28894的java進程(cheng)排(pai)在(zai)(zai)第(di)一(yi)(cpu占用(yong)142%),進程(cheng)ID為(wei)574的java進程(cheng)排(pai)在(zai)(zai)第(di)二(er)(cpu占用(yong)16%)。

敲擊鍵(jian)盤“x”(打開/關(guan)閉排序列(lie)的(de)(de)加亮效果),top的(de)(de)視圖(tu)變化如下:
可以看到,top默(mo)認的排序列是“%CPU”。
4. 通過”shift + >”或”shift + <”可以向(xiang)右或左改(gai)變排序(xu)列
下圖是按一次”shift + >”的效果圖,視圖現在已經按照%MEM來排序。
實例2:顯示 完整命令(ling)
命(ming)令:
top -c
輸(shu)出:

說明:
實例3:以批處理模式(shi)顯示(shi)程序信息(xi)
命令:
top -b
輸出:
說明:
實例4:以(yi)累(lei)積模式顯示程序信息
命令(ling):
top -S
輸出:
說明:
實(shi)例5:設(she)置(zhi)信息(xi)更新次數
命令(ling):
top -n 2
輸(shu)出:
說明:
表示更新兩次后終止更新顯示
實例6:設置信息更新時間
命令:
top -d 3
輸出(chu):
說明:
表(biao)示更新(xin)周(zhou)期為3秒(miao)
實(shi)例7:顯示(shi)指定(ding)的進(jin)程(cheng)信息
命令:
top -p 574
輸出:

說明:
5.top交互命令
在(zai)(zai)top 命(ming)(ming)(ming)令(ling)執(zhi)行過(guo)程中(zhong)可以使(shi)用的一(yi)些交互命(ming)(ming)(ming)令(ling)。這(zhe)些命(ming)(ming)(ming)令(ling)都(dou)是單(dan)字母的,如(ru)果在(zai)(zai)命(ming)(ming)(ming)令(ling)行中(zhong)使(shi)用了s 選項, 其中(zhong)一(yi)些命(ming)(ming)(ming)令(ling)可能會被屏蔽。
h 顯(xian)示幫助畫(hua)面,給出一(yi)些簡(jian)短的命令(ling)總結說明
k 終止一個進程。
i 忽(hu)略(lve)閑(xian)置(zhi)和僵死(si)進程(cheng)。這是一個(ge)開(kai)關式(shi)命(ming)令。
q 退出程序
r 重新安排(pai)一個(ge)進程的優先級別
S 切換到累計模式
s 改變兩次刷新之間的延遲(chi)時(shi)間(單(dan)位為s),如果有小數,就換算成m s。輸(shu)入(ru)0值則(ze)系(xi)統將不斷刷新,默認值是5 s
f或(huo)者F 從當前顯示(shi)中添加或(huo)者刪除(chu)項目
o或者(zhe)O 改變顯示項目的順序
l 切換顯示平均負載和啟動時(shi)間信息
m 切(qie)換顯示(shi)內存信息
t 切換顯示進(jin)程和CPU狀態信息(xi)
c 切(qie)換顯示(shi)命令(ling)名稱和完整命令(ling)行
M 根據(ju)駐留內(nei)存大(da)小進行排序
P 根據CPU使用百分(fen)比大小進(jin)行排序
T 根(gen)據時(shi)(shi)間(jian)/累(lei)計(ji)時(shi)(shi)間(jian)進行排序(xu)
W 將當前設置寫入~/.toprc文件中
關注 熵減黑客 ,一起學習成長
