Linux top 命令的使用

用了好久的top 命令,還沒有對其進行一個深入的瞭解,是時候給自己充充電了:

不管三七二十一,先來一張圖:

耐心看一下,東西還不少:

第一行:  top - 10:54:34 up 22 days, 19:51,  1 user,  load average: 0.01, 0.01, 0.00

10:54:34    — 當前系統時間
up 22 days, 19:51 — 系統已經運行了22天19小時51分鐘(這裏是一個虛擬機,這裏聽說過一個技巧,去看看一個企業的技術實力咋樣,在能接觸到服務器的情況下,先top 一下,看看這臺服務器開了多久了,一兩天,一兩個月的,這個技術部可能成立的時間就這麼長時間了,正常情況下,誰回去重啓linux 服務器啊,都是重啓程序的,哈哈^_^)
1 users — 當前有1個用戶登錄系統
load average: 0.01, 0.01, 0.00 — load average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。(這臺虛擬機真空閒)

第二行: Tasks:  79 total,   1 running,  78 sleeping,   0 stopped,   0 zombie

Tasks — 任務(進程),系統現在共有79個進程,其中處於運行中的有1個,78個在休眠(sleep),stoped(停止)狀態的有0個,zombie(殭屍)狀態的有0個。

第三行: Cpu(s):  1.7%us,  0.3%sy,  0.0%ni, 98.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

us: user的縮寫 CPU 消耗在 User space (用戶空間)的時間百分比
sy:system 的縮寫  是消耗在 Kernel space (內核空間)的時間百分比。
ni:niceness 的縮寫,CPU 消耗在 nice 進程(低優先級)的時間百分比
id:idle 的縮寫,CPU 消耗在閒置進程的時間百分比,這個值越低,表示 CPU 越忙
wa:wait 的縮寫,CPU 等待外部 I/O 的時間百分比,這段時間 CPU 不能幹其他事,但是也沒有執行運算,這個值太高就說明外部設備有問題
hi:hardware interrupt 的縮寫,CPU 響應硬件中斷請求的時間百分比
si:software interrupt 的縮寫,CPU 響應軟件中斷請求的時間百分比
st:stole time 的縮寫,該項指標只對虛擬機有效,表示分配給當前虛擬機的 CPU 時間之中,被同一臺物理機上的其他虛擬機偷走的時間百分比

第四行: Mem:   3924792k total,   304908k used,  3619884k free,    22116k buffers 

total — 物理內存總量(4GB)
used — 使用中的內存總量(0.3GB)
free — 空閒內存總量(3.6G)
buffers — 緩存的內存量 (22M)

第五行:Swap:  4128764k total,        0k used,  4128764k free,   122732k cached

total — 交換區總量(4GB)
used — 使用的交換區總量(0M)
free — 空閒交換區總量(4GB)
cached — 緩衝的交換區總量(122MB)

這裏要注意一下:不能用windows的內存概念理解這些數據,第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,空閒內存總量(free)是內核還未納入其管控範圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重複利用的內存,內核並不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用爲此擔心。
如果出於習慣去計算可用內存數,這裏有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的cached,按這個公式此臺服務器的可用內存:3.6+0.02+0.12= 3.74GB。
對於內存監控,在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 — 進程名稱(命令名/命令行)

多U多核CPU監控產看方法:
在top基本視圖中,按鍵盤數字“1”,可監控每個邏輯CPU的狀況,在按“1”的情況下對比下圖

這裏的服務器因爲是虛擬機,只有一個內核,有的可以看出cpu0~cpu16,服務器有16個邏輯CPU,實際上是4個物理CPU。

進程字段排序
默認進入top時,各進程是按照CPU的佔用量來排序的,
敲擊鍵盤“b”(打開/關閉加亮效果),或者敲擊鍵盤“y”,可以通過敲擊“y”鍵關閉或打開運行態進程的加亮效果。
通過”shift + >”或”shift + <”可以向右或左改變排序,如果看不到效果,可敲擊鍵盤 “x”(打開/關閉排序列的加亮效果),效果展示如下:

可以通過敲擊“f”改變進程顯示的字段

敲擊“f”,看一下初始效果

上圖中,前面打“*”, 並且首字母大寫的,爲進程列表中所顯示的字段,如果要取消顯示,按鍵盤相應的字母,如果要增加,也按鍵盤相應的字母,如:增加CODE 和DATA 這兩個字段顯示,按鍵盤“r”和“s”,然後按“回車”,回到顯示列表,效果如下:

top命令的補充
top命令是Linux上進行系統監控的首選命令,但有時候卻達不到我們的要求,比如當前這臺服務器,top監控有很大的侷限性。top命令的監控最小單位是進程,所以看不到我關心的java線程數和客戶連接數,而這兩個指標是java的web服務非常重要的指標,通常我用ps和netstate兩個命令來補充top的不足。

監控java線程數:
ps -aux  (或者-elf) | grep java | wc -l
 
監控網絡客戶連接數:
netstat -n | grep tcp | grep 偵聽端口 | wc -l

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章