Linux-top命令學(xué)習(xí)

一、前言

??top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進(jìn)程的資源占用狀況,類似于Windows的任務(wù)管理器,和它功能很像的一個命令是ps命令,但ps命令是靜態(tài)的展示,也就是只展示某一時刻的進(jìn)程情況。本文將來學(xué)習(xí)top命令的常用操作。

二、命令介紹

我們來看幾個常用的參數(shù):

top -c 顯示進(jìn)程完整的地址
top -I 忽略失效過程
top -s 保密模式
top -S 累積模式
top -d<秒數(shù)> 更新時間 -d 3 表示更新周期為3秒
top -i<時間> 設(shè)置間隔時間
top -u<用戶名> 顯示指定用戶名
top -p<進(jìn)程號> 顯示指定進(jìn)程,也即是監(jiān)控特定的PID
top -n<次數(shù)> 循環(huán)顯示的次數(shù)  -n 2 表示更新兩次后終止更新顯示
top -H 線程模式操作,表示top以單個線程的模式進(jìn)行展示,不使用該選項,則是每個進(jìn)程中所有線程的總和顯示

三、實例

同樣,我們結(jié)合實例來學(xué)習(xí)top命令。

1. 首先,我們看下默認(rèn)情況下的top命令:
[mrzhang@192 ~]$ top

top - 15:59:17 up 18 min,  2 users,  load average: 0.52, 0.67, 0.47
Tasks: 214 total,   1 running, 213 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.1 us,  1.0 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3823720 total,  1261872 free,   921608 used,  1640240 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  2504904 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
 1513 root      20   0  288076  47052  22880 S   5.6  1.2   0:17.64 X           
 2097 mrzhang   20   0 2419744 126976  44664 S   4.0  3.3   0:41.45 gnome-shell 
 2752 mrzhang   20   0  708756  22852  14256 S   3.3  0.6   0:02.04 gnome-term+ 
 3229 mrzhang   20   0 1916704 142064  55376 S   2.7  3.7   0:46.67 Web Content 

前面五行是當(dāng)前系統(tǒng)整體的統(tǒng)計信息,我們來挨個了解下:

1.1. 第一行
  • 任務(wù)隊列信息:15:59:17,當(dāng)前系統(tǒng)時間;up 18 min,系統(tǒng)已經(jīng)運(yùn)行了多長時間(在此期間系統(tǒng)沒有重啟過),這里表示系統(tǒng)已經(jīng)運(yùn)行了18分鐘;
  • 2 users,表示當(dāng)前用戶登錄的數(shù)量是2;
  • load average: 0.52, 0.67, 0.47,load average,平均負(fù)載,表示CPU的負(fù)載能力;這三個參數(shù)分別是1分鐘,5分鐘,15分鐘的負(fù)載情況,load average數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進(jìn)程數(shù),然后按特定算法計算出的數(shù)值;
    • 如果你的機(jī)器有一個單核CPU,那么平均負(fù)載是1就意味著機(jī)器滿載的,并且有足夠的能力在采樣時間內(nèi)完成任務(wù)。同樣地,如果平均負(fù)載是2,那對單核的CPU是超載的,并需要2個可用內(nèi)核才能在同樣的采樣時間內(nèi)完成的要求的任務(wù);
    • 使用的時候,我們可以在top命令下先按下1,然后看下CPU的核數(shù),然后快速計算下負(fù)載;
1.2. 第二行

??任務(wù)進(jìn)程:Tasks: 214 total, 1 running, 213 sleeping, 0 stopped, 0 zombie,當(dāng)前系統(tǒng)共有214個進(jìn)程,其中處于運(yùn)行的有1個,213個線程在休眠,stop狀態(tài)的有0個,zombie狀態(tài)的線程有0個;

1.3. 第三行

**CPU狀態(tài)信息:3.1 us, 1.0 sy, 0.0 ni, 95.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st,這里需要用戶先了解下Linux下的用戶空間和內(nèi)核空間:

  • 3.1 us — 當(dāng)前用戶進(jìn)程(未調(diào)整優(yōu)先級)占用CPU的百分比
  • 1.0 sy — 內(nèi)核空間占用CPU的百分比。
  • 0.0 ni — 已調(diào)整過優(yōu)先級的進(jìn)程占用CPU的百分比
  • 95.9 id — 空閑CPU百分比
  • 0.0 wa — IO等待占用CPU的百分比
  • 0.0 hi — 硬件中斷(Hardware IRQ)占用CPU的百分比
  • 0.0 si — 軟件中斷(Software Interrupts)占用CPU的百分比
  • 0.0 st (Steal Time),st 的全稱是 Steal Time ,就是 Xen Hypervisor 分配給運(yùn)行在其它虛擬機(jī)上的任務(wù)的實際CPU時間
1.4. 第四行

??內(nèi)存狀態(tài),KiB Mem:3823720 total, 1261872 free, 921608 used, 1640240 buff/cache;total, 物理內(nèi)存總量;free,空閑內(nèi)存總量;used,使用中的內(nèi)存總量;buff/cache,緩存的內(nèi)存總量,單位都是KB;

1.5. 第五行

??swap交換分區(qū)信息,KiB Swap: 4063228 total, 4063228 free, 0 used. 2504904 avail Mem;total,交換區(qū)總量;used,使用的交換區(qū)總量;free,空閑交換區(qū)總量;avail Mem,可用交換區(qū)總量;

后面的是進(jìn)程的詳細(xì)信息:

  • PID,進(jìn)程id;
  • USER,進(jìn)程所有者;
  • PR,進(jìn)程優(yōu)先級;
  • NI,nice值,負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級;
  • VIRT,進(jìn)程使用的虛擬內(nèi)存總量,單位KB,VIRT=SWAP+RES;
  • RES,進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位KB;
  • SHR,共享內(nèi)存大小,單位KB;
  • S,進(jìn)程狀態(tài),前文已經(jīng)說過,D=不可中斷的睡眠狀態(tài) R=運(yùn)行 S=睡眠 T=跟蹤/停止 Z=僵尸進(jìn)程;
  • %CPU,上次更新到現(xiàn)在的CPU時間占用百分比;
  • %MEM,進(jìn)程使用的物理內(nèi)存百分比;
  • TIME+,進(jìn)程使用的CPU時間總計,單位1/100秒;
  • COMMAND,進(jìn)程名稱(命令名/命令行);

top命令默認(rèn)在一個特定間隔(5秒)后刷新顯示。要手動刷新,用戶可以輸入回車或者空格。
另外,這里再簡單說下:

  • top針對%CPU的展示有兩種模式,Irix modeSolaris mode,默認(rèn)展示的是Irix mode;兩種模式的區(qū)別,簡單來說就是Irix mode 計算的是占用總CPU核數(shù)的百分比,如果進(jìn)程啟用了多線程占用了多個核心,該值可能會超過100%,但不會超過總核數(shù)*100;而Solaris mode表示計算的是單個CPU內(nèi)核的平均百分比,也就是總的CPU百分比除以CPU總核數(shù);而我們可以通過交互式命令 I 來進(jìn)行兩種模式的切換,也就是shift+i;

另外可以看下man top中的簡介:

k: %CPU -- CPU usage
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.

2. 監(jiān)控每個CPU的運(yùn)行情況

在top視圖中,我們通過按鍵1 可監(jiān)控每個CPU的運(yùn)行情況:

Tasks: 212 total,   1 running, 211 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  2.7 us,  1.4 sy,  0.0 ni, 95.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  1.4 us,  0.0 sy,  0.0 ni, 98.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3823720 total,  1100768 free,  1035412 used,  1687540 buff/cache

??如果不按1的話,top視圖展示的是所有cpu的平均值。按完1之后,top命令展示的是邏輯CPU的個數(shù),也就是物理CPU * CPU對應(yīng)的內(nèi)核數(shù),不過有可能由于Intel的超線程技術(shù),最終邏輯CPU的個數(shù)可能還需要 * 2。如果我們想查看服務(wù)器CPU的信息,可以通過 /proc/cpuinfo 進(jìn)行查看。
??這里我們可以看到我們的4個邏輯CPU的運(yùn)行情況,再按1,將會返回top的基礎(chǔ)視圖。

3. 高亮顯示當(dāng)前運(yùn)行線程

進(jìn)行top基礎(chǔ)視圖后,點(diǎn)擊鍵盤 b,可以看到我們當(dāng)前的進(jìn)程被高亮了。而y鍵則是控制開啟或關(guān)閉正在運(yùn)行的進(jìn)程的加亮效果。

顯示當(dāng)前運(yùn)行進(jìn)程.png

4. 查看目前進(jìn)程的排序字段

默認(rèn)情況下,我們進(jìn)入top視圖時,是根據(jù)CPU的占有率進(jìn)行排序的。我們可以使用鍵盤x 來打開或這關(guān)閉排序列的高亮效果,top的視圖變化為:

top排序.png

可以看到,目前top的排序字段是%CPU;

5. 借助Shift鍵來改變排序列

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

另外,可以通過Shift+p 按照cpu排序,Shift+m 按照內(nèi)存排序;

6. 顯示進(jìn)程完整的地址

使用top -c顯示進(jìn)程完整的地址:

KiB Swap:  4063228 total,  4063228 free,        0 used.  2231600 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                         
 1513 root      20   0  299464  55468  27924 S   6.0  1.5   0:46.08 /usr/bin/X :0 -background none -noreset -audit+ 
 2097 mrzhang   20   0 2463300 156804  44756 S   5.6  4.1   2:00.73 /usr/bin/gnome-shell                            
 2752 mrzhang   20   0  721504  25020  15384 S   3.0  0.7   0:10.82 /usr/libexec/gnome-terminal-server              
 3229 mrzhang   20   0 2012160 209220  67728 S   2.0  5.5   2:13.94 /usr/lib64/firefox/plugin-container -greomni /+ 
 5650 mrzhang   20   0  157744   2376   1628 R   0.7  0.1   0:01.40 top -c      

小命令:在top視圖中,可以使用shift + j或者j來控制左右對齊。

7. 顯示進(jìn)程信息的其他字段:

進(jìn)入top視圖后,我們點(diǎn)擊f鍵,這時進(jìn)入另一個視圖,在這里可以設(shè)置基本視圖中顯示的字段:

Fields Management for window 1:Def, whose current sort field is PPID
   Navigate with Up/Dn, Right selects for move then <enter> or Left commits,
   'd' or <space> toggles display, 's' sets sort.  Use 'q' or <esc> to end!

* PID     = Process Id             PGRP    = Process Group Id       vMj     = Major Faults delta  
* USER    = Effective User Name    TTY     = Controlling Tty        vMn     = Minor Faults delta  
* PR      = Priority               TPGID   = Tty Process Grp Id     USED    = Res+Swap Size (KiB) 
* NI      = Nice Value             SID     = Session Id             nsIPC   = IPC namespace Inode 
* VIRT    = Virtual Image (KiB)    nTH     = Number of Threads      nsMNT   = MNT namespace Inode 
* RES     = Resident Size (KiB)    P       = Last Used Cpu (SMP)    nsNET   = NET namespace Inode 
* SHR     = Shared Memory (KiB)    TIME    = CPU Time               nsPID   = PID namespace Inode 
* S       = Process Status         SWAP    = Swapped Size (KiB)     nsUSER  = USER namespace Inode
* %CPU    = CPU Usage              CODE    = Code Size (KiB)        nsUTS   = UTS namespace Inode 
* %MEM    = Memory Usage (RES)     DATA    = Data+Stack (KiB)    
* TIME+   = CPU Time, hundredths   nMaj    = Major Page Faults   
* COMMAND = Command Name/Line      nMin    = Minor Page Faults   
 PPID    = Parent Process pid     nDRT    = Dirty Pages Count   
  UID     = Effective User Id      WCHAN   = Sleeping in Function
  RUID    = Real User Id           Flags   = Task Flags <sched.h>
  RUSER   = Real User Name         CGROUPS = Control Groups      
  SUID    = Saved User Id          SUPGIDS = Supp Groups IDs     
  SUSER   = Saved User Name        SUPGRPS = Supp Groups Names   
  GID     = Group Id               TGID    = Thread Group Id     
  GROUP   = Group Name             ENVIRON = Environment vars    
[mrzhang@192 ~]$ 

前面加 * 號的表示是顯示在基礎(chǔ)視圖中的,我們?nèi)绻@示或不顯示某些字段,在選中字段上,敲擊d即可實現(xiàn)。

8. 切換交替顯示模式

進(jìn)入top視圖后,鍵入A,顯示:

切換交替模式.png

??這里會展示類似4個窗口,窗口的左上角有4個選項:Def(默認(rèn)字段組) ,Job (任務(wù)字段組),Mem(內(nèi)存字段組),Usr(用戶字段組),四組字段共有一個獨(dú)立的可配置的概括區(qū)域和它自己的可配置任務(wù)區(qū)域。我們可以使用aw來進(jìn)行切換,a移動到后一個窗口,w移動到前一個窗口,用g命令可以輸入一個數(shù)字來選擇當(dāng)前窗口。

四、top交互命令

在top的視圖中,我們可以使用一些交換命令來幫助我們進(jìn)行操作,這些命令都是單個英文字母,如果在命令行中使用了s 選項, 其中一些命令可能會被屏蔽。我們來了解下:

h  顯示幫助畫面,給出一些簡短的命令總結(jié)說明
k  終止一個進(jìn)程;
c  顯示進(jìn)程啟動時的完整路徑和程序名
i  切換顯示空閑任務(wù)進(jìn)程
q  退出程序
r  重新安排一個進(jìn)程的優(yōu)先級別
S  切換到累計模式
d或者s  設(shè)置顯示的刷新間隔(單位為s),當(dāng)敲下該鍵后,你會被提示輸入一個值,然后這個設(shè)置的值將會作為刷新時間,輸入0值則系統(tǒng)將不斷刷新,默認(rèn)值是5s
l  切換顯示平均負(fù)載和啟動時間信息
m  切換顯示內(nèi)存信息
t  切換顯示進(jìn)程和CPU狀態(tài)信息
c  切換顯示命令名稱和完整命令行
A  切換交替顯示模式
M  根據(jù)駐留內(nèi)存大小進(jìn)行排序
P  根據(jù)CPU使用百分比大小進(jìn)行排序
T  根據(jù)時間/累計時間進(jìn)行排序
W  將當(dāng)前設(shè)置寫入~/.toprc文件中 
B  粗體顯示一些重要命令信息
R  反向排序
Z  改變顏色
f或F 從當(dāng)前顯示中添加或者刪除項目
o或O 改變顯示項目的順序

到這,我們學(xué)習(xí)了top命令大部分的功能,如有需要,大家可以參考下面鏈接學(xué)習(xí)更多內(nèi)容,另外,有興趣的童鞋可以了解下htop命令。

本文參考自:
30個實例詳解TOP命令
為什么 Linux 的 htop 命令完勝 top 命令
高效的使用 top
linux top命令查看內(nèi)存及多核CPU的使用講述

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

相關(guān)閱讀更多精彩內(nèi)容

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