top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。下麵詳細介紹它的使用方法。top是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態.如果在前臺執行該命令,它將獨占前臺,直到用戶終止該程式為止.比較準確的說,top命令提供了 ...
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。下麵詳細介紹它的使用方法。top是一個動態顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態.如果在前臺執行該命令,它將獨占前臺,直到用戶終止該程式為止.比較準確的說,top命令提供了實時的對系統處理器的狀態監視.它將顯示系統中CPU最“敏感”的任務列表.該命令可以按CPU使用.記憶體使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過互動式命令或者在個人定製文件中進行設定.
一.命令格式
top [參數]
二.命令功能
顯示當前系統正在執行的進程的相關信息,包括進程ID、記憶體占用率、CPU占用率等
三.命令參數
參數 | 描述 |
---|---|
-b | 批處理 |
-c | 顯示完整的治命令 |
-I | 忽略失效過程 |
-s | 保密模式 |
-S | 累積模式 |
-i<時間> | 設置間隔時間 |
-u<用戶名> | 指定用戶名 |
-p<進程號> | 指定進程 |
-n<次數> | 迴圈顯示的次數 |
四. 使用實例
1.顯示進程信息
命令:
top
輸出:
[hc@localhost ~]$ top
top - 09:22:56 up 6 days, 1:40, 3 users, load average: 0.22, 0.31, 0.71
Tasks: 231 total, 1 running, 230 sleeping, 0 stopped, 0 zombie
%Cpu(s): 10.6 us, 12.1 sy, 0.0 ni, 77.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3863568 total, 473100 free, 1651284 used, 1739184 buff/cache
KiB Swap: 3145724 total, 3120012 free, 25712 used. 1837920 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2676 hc 20 0 3627652 339496 22160 S 16.3 8.8 17:50.00 gnome-she+
689 polkitd 20 0 649880 17144 4636 S 10.3 0.4 678:56.95 polkitd
2051 root 20 0 358552 50640 6600 S 6.6 1.3 4:44.68 X
101038 hc 20 0 771640 27384 17392 S 2.7 0.7 0:01.21 gnome-ter+
721 dbus 20 0 61996 3708 1648 S 2.0 0.1 186:05.55 dbus-daem+
680 root 20 0 396404 3816 3124 S 1.7 0.1 154:18.42 accounts-+
86929 root 20 0 457956 51100 6944 S 1.3 1.3 15:59.97 uwsgi
113983 hc 20 0 161972 2400 1620 R 0.7 0.1 0:00.11 top
9 root 20 0 0 0 0 S 0.3 0.0 28:14.62 rcu_sched
405 root 20 0 0 0 0 S 0.3 0.0 7:43.36 xfsaild/d+
681 root 20 0 13216 600 572 S 0.3 0.0 0:31.09 rngd
1304 mongod 20 0 1025840 81704 4160 S 0.3 2.1 51:29.25 mongod
1869 mysql 20 0 1263256 112036 4784 S 0.3 2.9 10:32.82 mysqld
2909 hc 20 0 611472 7256 3592 S 0.3 0.2 54:46.85 gsd-accou+
30239 root 20 0 453640 54536 3420 S 0.3 1.4 12:21.71 celery
1 root 20 0 125804 3544 2120 S 0.0 0.1 0:16.95 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.44 kthreadd
說明:
統計信息區:
前五行是當前系統情況整體的統計信息區。下麵我們看每一行信息的具體意義。
第一行,任務隊列信息,同 uptime 命令的執行結果,具體參數說明情況如下:
09:22:56 -- 當前系統時間
up 6 days, 1:40 -- 系統已經運行了6天1小時40分鐘(在這期間系統沒有重啟過)
3 users -- 當前有2個用戶登錄系統
load average: 0.22, 0.31, 0.71 -- load average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。
load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定演算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
第二行,Tasks — 任務(進程),具體信息說明如下:
系統現在共有231個進程,其中處於運行中的有1個,230個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵屍)的有0個。
第三行,cpu狀態信息,具體屬性說明如下
10.6 us -- 用戶態占用CPU的百分比
12.1 sy -- 內核態占用CPU的百分比
0.0 ni -- 用做nice加權的進程分配的用戶態cpu占用CPU的百分比
77.3 id -- 空閑的cpu百分比
0.0 wa -- cpu等待磁碟寫入占用CPU的百分比
0.0 hi -- 硬中斷(Hardware IRQ)占用CPU的百分比
0.0 si -- 軟中斷(Software Interrupts)占用CPU的百分比
0.0 st
備註:在這裡CPU的使用比率和windows概念不同,需要理解linux系統用戶空間和內核空間的相關知識!
第四行,記憶體狀態,具體信息如下:
3863568 total -- 物理記憶體總量
473100 free -- 空閑記憶體總量
1651284 used -- 使用中的記憶體總量
1739184 buff/cache -- 緩存的記憶體量
第五行,swap交換分區信息,具體信息說明如下:
3145724 total -- 交換區總量
3120012 free -- 空閑交換區總量
25712 used -- 使用的交換區總量
1837920 avail Mem -- 表示可用於進程下一次分配的物理記憶體數量
備註:
第四行中使用中的記憶體總量(used)指的是現在系統內核控制的記憶體數,空閑記憶體總量(free)是內核還未納入其管控範圍的數量。納入內核管理的記憶體不見得都在使用中,還包括過去使用過的現在可以被重覆利用的記憶體,內核並不把這些可被重新使用的記憶體交還到free中去,因此在linux上free記憶體會越來越少,但不用為此擔心。
如果出於習慣去計算可用記憶體數,這裡有個近似的計算公式:第四行的free + 第四行的buff/cache,按這個公式此台伺服器的可用記憶體。
對於記憶體監控,在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 | 進程名稱(命令名/命令行) |
2.顯示完整命令
命令:
top -c
輸出:
[hc@localhost ~]$ top -c
top - 10:01:50 up 6 days, 2:19, 3 users, load average: 0.01, 0.04, 0.10
Tasks: 233 total, 1 running, 232 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 10.8 sy, 0.0 ni, 83.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3863568 total, 451416 free, 1665668 used, 1746484 buff/cache
KiB Swap: 3145724 total, 3120012 free, 25712 used. 1823504 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
689 polkitd 20 0 649880 17144 4636 S 10.0 0.4 682:30.53 /usr/lib/polkit-1/polkitd --no-debug
2676 hc 20 0 3646940 359304 22308 S 6.0 9.3 18:02.04 /usr/bin/gnome-shell
2051 root 20 0 352052 44092 6600 S 3.3 1.1 4:50.20 /usr/bin/X :0 -background none -nor+
721 dbus 20 0 61996 3708 1648 S 2.3 0.1 187:04.96 /usr/bin/dbus-daemon --system --add+
680 root 20 0 396404 3816 3124 S 2.0 0.1 155:06.59 /usr/libexec/accounts-daemon
101038 hc 20 0 772056 27784 17528 S 1.3 0.7 0:03.61 /usr/libexec/gnome-terminal-server
86929 root 20 0 457956 51100 6944 S 1.0 1.3 16:30.76 /home/hc/project/envs/autoAweme/bin+
1869 mysql 20 0 1263256 112036 4784 S 0.7 2.9 10:35.24 /usr/libexec/mysqld --basedir=/usr +
2909 hc 20 0 611472 7256 3592 S 0.7 0.2 55:04.22 /usr/libexec/gsd-account
9 root 20 0 0 0 0 S 0.3 0.0 28:22.21 [rcu_sched]
405 root 20 0 0 0 0 S 0.3 0.0 7:45.11 [xfsaild/dm-0]
2641 hc 20 0 60172 2152 1580 S 0.3 0.1 0:00.27 /bin/dbus-daemon --config-file=/usr+
2889 hc 20 0 797116 12812 6428 S 0.3 0.3 4:06.38 /usr/libexec/gsd-color
71994 hc 20 0 162116 2504 1704 R 0.3 0.1 0:00.03 top -c
1 root 20 0 125804 3544 2120 S 0.0 0.1 0:16.97 /usr/lib/systemd/systemd --switched+
2 root 20 0 0 0 0 S 0.0 0.0 0:00.44 [kthreadd]
3 root 20 0 0 0 0 S 0.0 0.0 1:26.89 [ksoftirqd/0]
3.以批處理模式顯示程式信息
命令:
top -b
4.以累積模式顯示程式信息
命令:
top -S
5.設置信息更新次數
命令:
top -n 2
說明:
表示更新兩次後終止更新顯示
6.設置信息更新時間
命令:
top -d 3
說明:
表示更新周期為3秒
7.顯示指定的進程信息
命令:
top -p 30568
輸出:
[hc@localhost ~]$ top -p 30568
top - 10:04:42 up 6 days, 2:22, 3 users, load average: 0.26, 0.09, 0.11
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 9.7 us, 12.3 sy, 0.0 ni, 77.9 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 3863568 total, 451040 free, 1665892 used, 1746636 buff/cache
KiB Swap: 3145724 total, 3120012 free, 25712 used. 1823304 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30568 root 20 0 310244 52392 3652 S 0.0 1.4 0:29.02 uwsgi
五. 其他使用技巧
1.多U多核CPU監控
在top基本視圖中,按鍵盤數字“1”,可監控每個邏輯CPU的狀況:
輸出:
top - 09:52:33 up 6 days, 2:10, 3 users, load average: 0.00, 0.01, 0.11
Tasks: 233 total, 2 running, 230 sleeping, 0 stopped, 1 zombie
%Cpu0 : 2.7 us, 9.2 sy, 0.0 ni, 88.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 3.4 us, 10.3 sy, 0.0 ni, 86.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3863568 total, 458724 free, 1659276 used, 1745568 buff/cache
KiB Swap: 3145724 total, 3120012 free, 25712 used. 1829944 avail Mem
說明:
觀察上圖,伺服器有2個邏輯CPU,實際上是1個物理CPU。再按數字鍵1,就會返回到top基本視圖界面。
2.高亮顯示當前運行進程
在top基本視圖中,敲擊鍵盤“b”(打開/關閉加亮效果)
可以通過敲擊“y”鍵關閉或打開運行態進程的加亮效果。
3.進程欄位排序
預設進入top時,各進程是按照CPU的占用量來排序的, 敲擊鍵盤“x”(打開/關閉排序列的加亮效果)
4.通過”shift + >”或”shift + <”可以向右或左改變排序列
5.top交互命令
在top 命令執行過程中可以使用的一些交互命令。這些命令都是單字母的,如果在命令行中使用了s 選項, 其中一些命令可能會被屏蔽。
命令 | 說明 |
---|---|
h | 顯示幫助畫面,給出一些簡短的命令總結說明 |
k | 終止一個進程。 |
i | 忽略閑置和僵死進程。這是一個開關式命令。 |
q | 退出程式 |
r | 重新安排一個進程的優先順序別 |
S | 切換到累計模式 |
s | 改變兩次刷新之間的延遲時間(單位為s),如果有小數,就換算成m s。輸入0值則系統將不斷刷新,預設值是5s |
f或者F | 從當前顯示中添加或者刪除項目 |
o或者O | 改變顯示項目的順序 |
l | 切換顯示平均負載和啟動時間信息 |
m | 切換顯示記憶體信息 |
t | 切換顯示進程和CPU狀態信息 |
c | 切換顯示命令名稱和完整命令行 |
M | 根據駐留記憶體大小進行排序 |
P | 根據CPU使用百分比大小進行排序 |
T | 根據時間/累計時間進行排序 |
W | 將當前設置寫入~/.toprc文件中 |