top命令資訊詳解

fuhaizi發表於2021-06-24

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
%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記憶體會越來越少,但不用為此擔心
  • 第五行swap交換分割槽
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 — 程式名稱(命令名/命令列)