1. 程式人生 > >Linux top 命令的使用

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