一、前言
??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 mode和Solaris 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)程的加亮效果。

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

可以看到,目前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,顯示:

??這里會展示類似4個窗口,窗口的左上角有4個選項:Def(默認(rèn)字段組) ,Job (任務(wù)字段組),Mem(內(nèi)存字段組),Usr(用戶字段組),四組字段共有一個獨(dú)立的可配置的概括區(qū)域和它自己的可配置任務(wù)區(qū)域。我們可以使用a和w來進(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的使用講述