top詳解
[root@localhost ~]# top
top - 09:36:38 up 17:59, 3 users, load average: 0.00, 0.03, 0.00
Tasks: 180 total, 1 running, 112 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 2008280 total, 1402304 free, 310492 used, 295484 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1544460 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10 root 20 0 0 0 0 I 0.3 0.0 2:15.46 rcu_sched
16 root 20 0 0 0 0 S 0.3 0.0 0:03.40 ksoftirqd/1
1058 root 20 0 675964 59924 26036 S 0.3 3.0 5:03.86 containerd
3462 root 20 0 218156 13012 3444 S 0.3 0.6 0:13.40 supervisord
3465 root 20 0 145864 5108 3344 S 0.3 0.3 1:15.63 redis-server
3491 root 20 0 159516 9736 8272 S 0.3 0.5 0:00.40 sshd
3766 root 20 0 148980 6440 3308 S 0.3 0.3 0:43.82 redis-server
1 root 20 0 191136 5364 3896 S 0.0 0.3 0:01.73 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.06 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kb
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
9 root 20 0 0 0 0 S 0.0 0.0 0:00.16 ksoftirqd/0
top - 09:36:38 up 17:59, 3 users, load average: 0.00, 0.03, 0.00
依次對應:系統當前時間 up 系統到目前為止i執行的時間, 當前登陸系統的使用者數量, load average後面的三個數字分別表示距離現在一分鐘,五分鐘,十五分鐘的負載情況。
這行資訊與命令uptime顯示的資訊相同
注意:load average資料是每隔5秒鐘檢查一次活躍的程式數,然後按特定演算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
Tasks: 180 total, 1 running, 112 sleeping, 0 stopped, 0 zombie
依次對應:tasks表示任務(程式),180 total則表示現在有180個程式,其中處於執行中的有1個,112個在休眠(掛起),stopped狀態即停止的程式數為0,zombie狀態即殭屍的程式數為0個。
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
依次對應:
us:user 使用者空間佔用cpu的百分比
sy:system 核心空間佔用cpu的百分比
ni:niced 改變過優先順序的程式佔用cpu的百分比
空閒cpu百分比
wa:IO wait IO等待佔用cpu的百分比
hi:Hardware IRQ 硬中斷 佔用cpu的百分比
si:software 軟中斷 佔用cpu的百分比
st:被hypervisor偷去的時間
KiB Mem : 2008280 total, 1402304 free, 310492 used, 295484 buff/cache
依次對應:實體記憶體總量(2G),空閒記憶體總量(1.4G),使用中的記憶體總量(0.3G),緩衝記憶體量(0.2G)
第四行中使用中的記憶體總量(used)指的是現在系統核心控制的記憶體數,空閒記憶體總量(free)是核心還未納入其管控範圍的數量。納入核心管理的記憶體不見得都在使用中,還包括過去使用過的現在可以被重複利用的記憶體,核心並不把這些可被重新使用的記憶體交還到free中去,因此在linux上free記憶體會越來越少,但不用為此擔心
KiB Swap: 0 total, 0 free, 0 used. 1544460 avail Mem
依次對應:交換區總量(0G),空閒交換區總量(0G),使用的交換區總量(0G),可用交換取總量(1.5G)
對於記憶體監控,在top裡我們要時刻監控第五行swap交換分割槽的used,如果這個數值在不斷的變化,說明核心在不斷進行記憶體和swap的資料交換,這是真正的記憶體不夠用了。
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 — 程式名稱(命令名/命令列)