一.信息顯示
Linux系統可以通過top命令查看系統的運行狀態,包括負載,內存使用(交換分區),CPU使用、當前運行的線程,進程等信息。
[root@localhost home]# top -help procps-ng version 3.3.10 Usage: top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
參數說明:
- d 指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。
- p 通過指定監控進程ID來僅僅監控某個進程的狀態。
- q 該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那么top將以盡可能高的優先級運行。
- S 指定累計模式
- s 使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。
- i 使top不顯示任何閑置或者僵死進程。
- c 顯示整個命令行而不只是顯示命令名
執行top,可以看到某一時刻,系統的運行狀況,默認在3秒后刷新顯示,這個可以動態設置(上面的 -d 參數)。
[root@localhost home]# top
top - 11:09:00 up 324 days, 17:24, 1 user, load average: 0.38, 0.38, 0.37 Tasks: 136 total, 1 running, 135 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.9 us, 0.5 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 16267100 total, 1142448 free, 7907452 used, 7217200 buff/cache KiB Swap: 0 total, 0 free, 0 used. 7969352 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5466 elastic+ 20 0 7503920 1.508g 39564 S 4.0 9.7 4:46.62 java 9544 root 20 0 1306232 190444 6404 S 2.0 1.2 4425:19 mongod 314 root 20 0 9.767g 2.185g 15568 S 1.3 14.1 48:34.56 java 12447 kibana 20 0 1293128 116832 7316 S 1.0 0.7 1061:09 node 28899 root 20 0 134904 9940 5288 S 1.0 0.1 1120:54 AliYunDun 10170 root 20 0 2025680 60264 4848 S 0.7 0.4 3641:19 mongod 315 root 20 0 0 0 0 S 0.3 0.0 233:17.75 jbd2/vda1-8
5328 root 20 0 9870984 281836 16864 S 0.3 1.7 0:20.55 java 5620 root 20 0 157720 2256 1556 R 0.3 0.0 0:01.57 top 10737 root 20 0 138976 9636 1204 S 0.3 0.1 1236:17 redis-server 10751 root 20 0 141024 11624 1080 S 0.3 0.1 764:46.02 redis-server 10757 root 20 0 136924 7752 1308 S 0.3 0.0 1305:56 redis-server 10764 root 20 0 175840 41360 1348 S 0.3 0.3 781:07.92 redis-server 10769 root 20 0 175840 46616 1300 S 0.3 0.3 760:02.02 redis-server 10775 root 20 0 136928 7652 1204 S 0.3 0.0 1220:41 redis-server 17817 mysql 20 0 3872248 346428 6344 S 0.3 2.1 56:03.08 mysqld 1 root 20 0 43600 3416 1880 S 0.0 0.0 6:32.62 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:33.96 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:02.52 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 1298:19 rcu_sched 10 root rt 0 0 0 0 S 0.0 0.0 3:05.07 watchdog/0
11 root rt 0 0 0 0 S 0.0 0.0 2:42.85 watchdog/1
12 root rt 0 0 0 0 S 0.0 0.0 0:02.70 migration/1
13 root 20 0 0 0 0 S 0.0 0.0 0:40.06 ksoftirqd/1
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H 16 root rt 0 0 0 0 S 0.0 0.0 2:40.06 watchdog/2
17 root rt 0 0 0 0 S 0.0 0.0 0:03.58 migration/2
18 root 20 0 0 0 0 S 0.0 0.0 0:36.39 ksoftirqd/2
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/2:0H 21 root rt 0 0 0 0 S 0.0 0.0 2:38.38 watchdog/3
22 root rt 0 0 0 0 S 0.0 0.0 0:03.58 migration/3
23 root 20 0 0 0 0 S 0.0 0.0 0:33.11 ksoftirqd/3
25 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/3:0H
第一行:這行顯示的信息與命令uptime顯示的信息相同
top - 11:09:00 up 324 days, 17:24, 1 user, load average: 0.38, 0.38, 0.37
對應的信息:系統當前時間 up 系統到目前為止運行的時間, 當前系統的登陸用戶數量,load average后面的三個數字分別表示距離現在一分鍾,五分鍾,十五分鍾的負載情況。
注意:load average數據是每隔5秒鍾檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
第二行:任務進程
Tasks: 136 total, 1 running, 135 sleeping, 0 stopped, 0 zombie
對應的信息:tasks表示任務(進程),136則表示現在有136個進程,其中處於運行中的有1個,135個在休眠(掛起),stopped狀態即停止的進程數為0,zombie狀態即僵屍的進程數為0個。
第三行:CPU狀態信息
%Cpu(s): 0.9 us, 0.5 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
依次對應:
us——用戶空間(user)占用cpu的百分比
sy——內核空間(system)占用cpu的百分比
ni——改變過優先級(niced)的進程占用cpu的百分比
id——空閑(idolt)CPU百分比
wa——IO等待(wait)占用cpu的百分比
hi——IRQ 硬中斷(Hardware)占用cpu的百分比
si——軟中斷(software)占用cpu的百分比
st——被hypervisor偷去的時間
第三行和第四行:當前內存狀態信息, 單位都是KiB
KiB Mem : 16267100 total, 1142448 free, 7907452 used, 7217200 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7969352 avail Mem
顯示的信息與命令 free 顯示的信息相同
對應信息:
Mem:物理內存總量(16G)
free: 空閑內存總量(1G)
used: 使用中的內存總量
buff/cache: 用作內核緩存的內存量
注:使用中的內存總量(used)指的是現在系統內核控制的內存數,空閑內存總量(free)是內核還未納入其管控范圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核並不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心,
buff/cached代表了buff和cache總共用了多少,buff代表buffer cache占了多少空間,由於它主要用來緩存磁盤上文件的元數據,所以一般都比較小,跟cache比可以忽略不計;
cache代表page cache和其它一些占用空間比較小且大小比較固定的cache的總和,基本上cache就約等於page cache,page cache的准確值可以通過查看/proc/meminf中的Cached得到。由於page cache是用來緩存磁盤上文件內容的,所以占有空間很大,Linux一般會盡可能多的將空閑物理內存用於page cache。
Swap: 交換區總量
free:空閑交換區總量
used: 使用的交換區總量
avail Mem:表示可用於進程下一次分配的物理內存數量,這個大小一般比free大一點,因為除了free的空間外,系統還能立即釋放出一些空間來。
對於內存監控,在top里我們要時刻監控swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。正常情況下swap應該很少被使用,used值比較大說明交換空間被使用的比較多,如果通過vmstat命令看到swap in/out的比較頻繁的話,說明系統內存嚴重不足,整體性能已經受到嚴重影響
最后為進程信息區
top命令第七行,各進程的監控:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
依次對應:
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 — 進程名稱(命令名/命令行)
二.交互命令
1.1 ‘h’ 幫助
top命令進入視圖后,鍵入h會顯示如下界面,顯示交互命令的幫助菜單
1.2 敲ENTER或者 SPACE鍵: 刷新顯示
1.3 A’: 切換交替顯示模式
top命令視圖下,鍵入‘A‘顯示如下:
顯示4個窗口:Def (默認字段組)
Job (任務字段組)
Mem (內存字段組)
Usr (用戶字段組)
四組字段共有一個獨立的可配置的概括區域和它自己的可配置任務區域。4個窗口中只有一個窗口是當前窗口。當前窗口的名稱顯示在左上方。(注:只有當前窗口才會接受你鍵盤交互命令)
我們可以用’a’和’w’在4個 窗口間切換。’a’移到后一個窗口,’w’移到前一個窗口。用’g’命令你可以輸入一個數字來選擇當前窗口。
在鍵入‘A‘后在鍵入‘a‘的顯示如下:
1.4 ‘B’: 觸發粗體顯示
一些重要信息會以加粗字體顯示。這個命令可以切換粗體顯示
1.5 ‘d’ 或‘s’: 設置顯示的刷新間隔
當鍵下’d’或’s’時,你將被提示輸入一個值(以秒為單位),它會以設置的值作為刷新間隔。如果你這里輸入了6.0,top將會每秒刷新
1.6 ‘l’、‘t’、‘m’: 切換負載、任務、內存信息的顯示
1.7 ‘f’: 字段管理
用於選擇你想要顯示的字段。用’*’標記的是已選擇的。
上下光標鍵在字段內導航,左光標鍵可以選擇字段,回車或右光標鍵確認。
按’<’移動已排序的字段到左邊,’>’則移動到右邊。
1.8 ‘R’: 反向排序
1.9 ‘c’: 觸發命令
切換是否顯示進程啟動時的完整路徑和程序名。
鍵入‘c’后顯示:
2.0 ‘i’: 空閑任務
切換顯示空閑任務
