Linux命令之top命令介紹

Linux命令之top命令介紹

       top命令是Linux下經常使用的性能分析工具,可以實時顯示系統中各個進程的資源佔用情況,相似於Windows的任務管理器。下面詳細介紹它的使用方法。html

       top是一個動態顯示過程,便可以經過用戶按鍵來不斷刷新當前狀態.若是在前臺執行該命令,它將獨佔前臺,直到用戶終止該程序爲止.比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最「敏感」的任務列表.該命令能夠按CPU使用.內存使用和執行時間對任務進行排序;並且該命令的不少特性均可以經過交互式命令或者在我的定製文件中進行設定java

1.命令格式:mysql

top [參數]linux

2.命令功能:算法

顯示當前系統正在執行的進程的相關信息,包括進程ID、內存佔用率、CPU佔用率等sql

3.命令參數:express

-b 批處理windows

-c 顯示完整的觸發命令(即commont字段內容的切換,貌似顯示爲請求類型與完整的該進程的觸發命令行內容之間切換) 顯示整個命令行而不僅是顯示命令名,這裏指的是command字段的列信息,將顯示完整的開啓該進程的命令行的信息。 開啓前:mysqld,開啓後:/usr/libexec/mysqld --basedir=/usr --datadir=/newdata/mysqldata --user=mysql --logcentos

-I 忽略失效過程緩存

-s 保密模式。

-S 累積模式。

-i<時間> 設置間隔時間。

-u<用戶名> 指定用戶名。

-p<進程號> 指定進程。

-n<次數> 循環顯示的次數。

4.使用實例:

實例1:顯示進程信息

[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

統計信息區前五行是當前系統狀況總體的統計信息區。下面咱們看每一行信息的具體意義。

第一行,任務隊列信息,該行同linux命令行uptime 命令的執行結果,詳細參見本手冊的uptime命令,具體參數說明狀況以下:

14:06:23 — 當前系統時間

up 70 days, 16:44 — 系統已經運行了70天16小時44分鐘(在這期間系統沒有重啓過的吆!)

 2 users — 當前有2個用戶登陸系統

load average: 1.15, 1.42, 1.44 — load average後面的三個數分別在剛剛過去的1分鐘、5分鐘、15分鐘的負載狀況,詳細參見uptime命令。

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

第二行Tasks — 任務(進程),具體信息說明以下:

206 total,  系統如今共有206個進程

 1 running, 其中處於運行中的有1個

 205 sleeping, 205個在休眠(sleep)

 0 stopped, stoped狀態的有0個

 0 zombie  zombie狀態(殭屍)的有0個

第三行,cpu狀態信息,具體屬性說明以下(關於cpu的使用率的計算,指的是一段時間內統計的處於在用狀態的cpu時間片佔該統計時間段的比例。好比linux的top命令貌似默認3秒統計一次。詳細參考子節點cpu使用率):

 5.9%us — 內存的用戶空間部分程序佔用CPU的百分比

 3.4% sy — 內存的內核空間部分程序佔用CPU的百分比。

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

 90.4% id — 空閒CPU百分比

 0.0% wa — IO等待佔用CPU的百分比等待輸入輸出的CPU時間百分比

 0.0% hi — 硬中斷(Hardware IRQ)佔用CPU的百分比,CPU服務於硬件中斷所耗費的時間總額

 0.2% si — 軟中斷(Software Interrupts)佔用CPU的百分比,CPU服務軟中斷所耗費的時間總額

 0.0%st    虛擬機佔用百分比

備註:在這裏CPU的使用比率和windows概念不一樣,須要理解linux系統內存區劃的用戶空間和內核空間的相關知識,參見本節點的子節點介紹!

第四行,內存狀態,具體信息以下:

32949016k total — 物理內存總量(32GB)

14411180k used — 使用中的內存總量(14GB)【使用中的內存總量(used)指的是如今系統內核控制的內存數,這裏能夠理解爲特指分配給應用進程的內存+物理內存的buffers+物理內存的caches這3個的和,應用進程有最高優先級,當物理內存不足時,系統會將buffers緩存的數據寫入到磁盤,將caches緩存的數據寫入到交換區的chaches,從而爲程序運行提供更多內存使用。也就是說,判斷內存是否夠用,主要的指標是判斷訪問高峯期,是否能夠給應用程序運行提供足夠的內存-亞強

18537836k free — 空閒內存總量(18GB)【空閒內存總量(free)是內核還未歸入其管控範圍的數量。歸入內核管理的內存不見得都在使用中,還包括過去使用過的如今能夠被重複利用的內存,內核並不把這些可被從新使用的內存交還到free中去,所以在linux上free內存會愈來愈少,但不用爲此擔憂。】

169884k buffers — 緩存的內存量 (169M),用於暫時存放要寫入到磁盤的數據,等待系統資源充足時候一次性寫入磁盤速度更快。從而沒必要每次程序寫入動做無需等待真正寫入磁盤成功,將要寫入的數據先存放到內存buffers緩衝區,程序直接繼續執行下面的動做。

備註:關於真正的機器的可用內存,若是出於習慣去計算真正的可用內存數,這裏有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的cached(這個參數自己表明swap交換區的一段存儲空間,只是該存儲空間的大小也等於物理內存中系統開闢的cached存儲區間,也就是交換區與物理內存都有cached緩衝區-亞強),按這個公式此臺服務器的可用內存:18537836k +169884k +3612636k = 22GB左右。

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

第五行,swap交換分區信息(也叫作虛擬物理內存,即在硬盤上開闢的一段空間,用於相似於內存功能,可是存取速度遠低於內存,能夠用於內存不足時使用),具體信息說明以下:

32764556k total — 交換區總量(32GB)

0k used — 使用的交換區總量(0K)

32764556k free — 空閒交換區總量(32GB)

3612636k cached — 緩衝的交換區總量(3.6GB),物理內存中的內容被換出到swap交換區,然後又被換入到物理內存,但使用過的swap交換區還沒有被覆蓋(注意這些還沒有被覆蓋的存儲空間不計入第五行的used參數值,貌似被計入了第五行的free中,由於這段內存空間若是系統須要,就會被覆蓋掉,所以被計入到了free變量),該數值即爲這些內容已存在於物理內存中的交換區的大小,相應的內存,再次被換出時可沒必要再對swap交換區寫入。也就是該參數值得內存中的一段存儲空間,這段空間中存儲着在交換區的一段空間數據,可是注意該交換區的數據實際已經被註銷掉,成爲空閒空間free,你知道即便成爲空閒空間,那麼若是沒有新數據寫入覆蓋掉該段存儲空間,那麼這段空間的數據是不會丟失的,所以當與之對應的內存中的當時調入內存中的一樣的數據因爲系統調用再次被調出到swap交換區(這段數據已經存在於交換區),那麼系統不會從新將這段數據寫入交換區,而是將原來已經存在於交換區的數據標誌爲可用便可。

綜上:【亞強】緩衝交換區cached是swap交換區中的一段空間,該空間存儲着從物理內存調入到swap交換區且又被物理內存調回到物理內存的數據且還沒有被從物理內存新調入到swap交換區的數據覆蓋掉的在swap交換區所佔存儲空間。當系統須要再次調出物理內存中的這些已經存在於cached中的數據到swap交換區,那麼系統不會從新寫入數據到swap交換區,而是將原來的這些存在於cached中的註銷標記改成數據可用便可(從而加快了數據交互速度)。這些用於cached緩衝交換區的存儲空間,當從物理內存中調入交換區swap的數據量很大時,那麼新調入的數據就可能要覆蓋掉這些cached所佔空間的有註銷標記的數據。所以cached緩衝交換區單獨拿出來,不被計入到used參數下,而是計入到free參數下,由於cached仍然是能夠被使用的。

亞強(強商科技)註釋:關於linux內存管理機制(物理內存(分爲程序使用的內存和buffers,cached)和虛擬內存(swap交換分區)),詳細參見本階段下面的【linux內存管理機制】節點。

第六行,空行

第七行如下:各進程(任務)的狀態監控,項目列信息說明以下:

默認狀況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。能夠經過下面的快捷鍵來更改顯示內容。 

序號  列名    含義
a PID 進程id
b PPID 父進程id
c RUSER Real user name
d UID 進程全部者的用戶id
e USER 進程全部者的用戶名
f GROUP 進程全部者的組名
g TTY 啓動進程的終端名。不是從終端啓動的進程則顯示爲
h PR 進程優先級(本字段介紹參加本手冊節點的子節點)
i NI nice值。負值表示高優先級,正值表示低優先級(本字段介紹參加本手冊節點的子節點),即值越小優先級越高,參見本手冊本節點的子節點。優先級部分
j P 最後使用的CPU,僅在多CPU環境下有意義
k %CPU 上次更新到如今的CPU時間佔用百分比,The task's share(分配) of the elapsed(消逝的) CPU time since the last screen
update, expressed as a percentage of total CPU time.  In a true SMP environment, if 'Irix mode' is Off, top will operate in
'Solaris mode' where a task's cpu usage will be divided by  the  total number of CPUs.You toggle 'Irix/Solaris' modes with
the 'I' interactive command.能夠用I來切換Irix/Solaris模式,在多核心的cpu系統中,%cpu列將根據上一次更新時刻到本次更新時刻每一個cpu的總時間
分爲100份,即若是有n個cpu核心,那麼總時間份數爲n*100份。那麼每一個進程的份數累加最大能夠達到n*100.若是運行在Irix模式下,那麼每一個進程
的%cpu字段的值爲上一次更新時刻到本次更新時刻全部cpu核心處理器分配給該進程的份數總和與n*100的比例,即此種狀況是相對於所有cpu的時間份數總
額的佔比。若是運行在Solaris模式下,那麼每一個進程的的%cpu字段的值爲上一次更新時刻到本次更新時刻全部cpu核心處理器分配給該進程的份數總和與100
的比例,即此種狀況是相對於每一個cpu時間份數總額的佔比(這裏的cpu應該指的是邏輯cup格式,1個物理cpu能夠有多個核心,着多個核心
也能夠稱爲多個邏輯cpu)
l    TIME 進程使用的CPU時間總計,單位秒,top命令的TIME/TIME+是指的進程所使用的CPU時間,不是進程啓動到如今的時間,所以,若是一個進程使
用的cpu不多,那即便這個進程已經存在N長時間,TIME/TIME+也是很小的數值。此外,若是你的系統有多個CPU,或者是多核CPU的話,那麼,進程佔用多
個cpu的時間是累加的。 Total CPU time the task has used since it started. When ‘Cumulative mode’ is On, each process is listed with
the cpu time that it and its dead children has used. You toggle ‘Cumulative mode’ with ‘S’, which is a command-line option and an
interactive command. See the ‘S’ interactive command for additional information regarding this mode.
m TIME+ 進程使用的CPU時間總計,單位1/100秒,top命令的TIME/TIME+是指的進程所使用的CPU時間,不是進程啓動到如今的時間,所以,若是
一個進程使用的cpu不多,那即便這個進程已經存在N長時間,TIME/TIME+也是很小的數值。此外,若是你的系統有多個CPU,或者是多核CPU的話,那麼,
進程佔用多個cpu的時間是累加的。CPU Time, hundredths The same as ‘TIME’, but reflecting more granularity through hundredths of
a second
n %MEM 進程使用的物理內存百分比
o VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
p SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。
q RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA,這裏指的是內存加數據。
r CODE 可執行代碼佔用的物理內存大小,單位kb
s DATA 可執行代碼之外的部分(數據段+棧)佔用的物理內存大小,單位kb
t SHR 共享內存大小,單位kb(本字段介紹參加本手冊節點的子節點)
u nFLT 頁面錯誤次數
v nDRT 最後一次寫入到如今,被修改過的頁面數。
w S 進程狀態(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/中止,Z=殭屍進程,詳細參見子節點【Linux進程狀態解析 之 R、S、D、T、Z、X (主要有三個狀態)】)
x COMMAND 觸發當前進程的命令名/命令行(能夠用c來切換)
y WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
z Flags 任務標誌,參考 sched.h

其餘使用技巧:

多U多核CPU監控

在top基本視圖中,按鍵盤數字「1」,可監控每一個邏輯CPU的情況,下面的cpu0,cpu1,cpu2,cpu3.....cpu15共計16個邏輯cpu:再按一下數字1,則返回主頁面,顯示cpu(s)的cpu性能。

觀察上圖,服務器有16個邏輯CPU,其實是4個物理CPU。再按數字鍵1,就會返回到top基本視圖界面。

高亮顯示當前運行進程

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

   ​  

咱們發現進程id爲2570的「top」進程被加亮了,top進程就是視圖第二行顯示的惟一的運行態(runing)的那個進程,能夠經過敲擊「y」鍵關閉或打開運行態進程的加亮效果。

進程字段排序字段高亮顯示

top  -x 

注意:使用-x開啓排序高亮功能後,還須要使用-b命令給出是否高亮顯示該排序的列。           

默認進入top時,各進程是按照CPU的佔用量來排序的,在下圖中進程ID爲28894的java進程排在第一(cpu佔用142%),進程ID爲574的java進程排在第二(cpu佔用16%)。

      

    敲擊鍵盤「x」(打開/關閉排序列的加亮效果,如會將當前排序行,高亮顯示),top的視圖變化以下:

      ​ 

能夠看到,top默認的排序列是「%CPU」。

排序字段: 經過」shift + >」或」shift + <」能夠向右或左改變排序列(注意:該組合鍵是在開啓了top以後,運行時按下的)

下圖是按一次」shift + >」的效果圖,視圖如今已經按照%MEM來排序。

       ​  

實例2:顯示完整命令

命令:

top -c  //亞強:該行貌似與直接寫top效果同樣

輸出:

      

說明:

實例3:以批處理模式顯示程序信息(高亮顯示某些字段,與-x結合,能夠控制顯示當前排序字段高亮)

命令:

top -b

輸出:

說明:

實例4:以累積模式顯示程序信息

命令:

top -S

輸出:

說明:

實例5:設置信息更新次數

命令:

  top -n  2

輸出:

說明:

表示更新兩次後終止更新顯示

實例6:設置信息更新時間,即間隔多少秒後更新,該參數支持浮點型數據,如top -d 0.2,每隔0.2秒刷新一次數據。

命令:

top -d 3

輸出:

說明:

表示更新週期爲3秒

實例7:顯示指定的進程信息

命令:

top -p 574    //亞強:後面的數字是PID的值,即進程的id號

輸出:

說明:

     實例8:top交互命令(關於下面須要輸入參數的命令如何返回到交互狀態初始化狀態,能夠不輸入任何參數,而後按下enter便可,若是輸入參數,而後按下enter,那麼執行當前交互命令,對於其餘交互動做,能夠用enter確認執行,用esc取消執行)

 

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

h 顯示幫助畫面,給出一些簡短的命令總結說明,按任意鍵後返回到top列表界面。

k 終止一個進程。輸入pid參數+enter便可以殺死該pid對應的進程。咱們能夠直接按下enter返回到top界面。

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

q 退出程序,//退出top命令

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

S 切換到累計模式

s 改變兩次刷新之間的延遲時間(單位爲s),若是有小數,就換算成ms(好比0.1的效果是100ms)。輸入0值則系統將不斷刷新,默認值是3s(centos中)

f從當前顯示中添加或者刪除項目更改顯示內容經過 f 鍵能夠選擇顯示的內容。按 f 鍵以後會顯示列的列表,按 a-z 便可顯示或隱藏對應的列,最後按回車鍵肯定。

F或O:選擇當前排序字段,按下a-z中的某個按鍵肯定排序字段,而後按下enter確認,按下esc取消。 

o或者O 改變顯示項目的順序//進入該模式後,系統用a,b,c,d,e...n標記表明每一列的表頭,咱們經過按下【標記字母】,那麼該字段後移動,按下【shift+標記字母】,則前移動。按 o 鍵能夠改變列的顯示順序。按小寫的 a-z 能夠將相應的列向右移動,而大寫的 A-Z 能夠將相應的列向左移動。最後按回車鍵肯定,按下esc取消。

l 字母l,切換顯示平均負載和啓動時間信息//top的第一行是否顯示

1 數字1,在top基本視圖中,按鍵盤數字「1」,可監控每一個邏輯CPU的情況,下面的cpu0,cpu1,cpu2,cpu3.....cpu15共計16個邏輯cpu:再按一下數字1,則返回主頁面,顯示cpu(s)的cpu性能。

m 切換顯示內存信息//top的第4,5行是否顯示

t 切換顯示進程和CPU狀態信息//top的第2,3行是否顯示

c 切換顯示命令名稱和完整命令行(亞強:(即commont字段內容的切換,貌似顯示爲請求類型與完整的該進程的觸發命令行內容之間切換)顯示整個命令行而不僅是顯示命令名 ,這裏指的是command字段的列信息,將顯示完整的開啓該進程的命令行的信息/僅僅簡略顯示來切換顯示。

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

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

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

R 改變排序方式(升序/降序)

」shift + >」或」shift + <」:能夠向右或左改變排序列(注意:該組合鍵是在開啓了top以後,運行時按下的)

b 當前處於運行狀態的行高亮/取消高亮(控制當前排序的行是否高亮,須要首先使用x開啓排序高亮)

x 當前處於排序字段的列高亮/取消高亮(有時候直接按下x無效果,此時首先按一下b執行高亮顯示)

I:切換Irix/Solaris模式,在多核心的cpu系統中,%cpu列將根據上一次更新時刻到本次更新時刻每一個cpu的總時間分爲100份,即若是有

n個cpu核心,那麼總時間份數爲n*100份。那麼每一個進程的份數累加最大能夠達到n*100.若是運行在Irix模式下,那麼每一個進程的的%cpu字段的值爲上一次更新時刻到本次更新時刻全部cpu核心處理器分配給該進程的份數總和與n*100的比例,即此種狀況是相對於所有cpu的時間份數總額的佔比。若是運行在Solaris模式下,那麼每一個進程的的%cpu字段的值爲上一次更新時刻到本次更新時刻全部cpu核心處理器分配給該進程的份數總和與100的比例,即此種狀況是相對於每一個cpu時間份數總額的佔比。

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

附經常使用操做:

top   //每隔5秒顯式全部進程的資源佔用狀況top -d 2  //每隔2秒顯式全部進程的資源佔用狀況top -p 12345 -p 6789//每隔5秒顯示pid是12345和pid是6789的兩個進程的資源佔用狀況top -d 2 -c -p 123456 //每隔2秒顯示pid是12345的進程的資源使用狀況,並顯式該進程啓動的命令行參數
相關文章
相關標籤/搜索