top命令檢視伺服器CPU與記憶體佔用
在linux的系統維護中,可能需要經常檢視cpu使用率,分析系統整體的執行情況。top命令可以實時動態地檢視系統的整體執行情況。
【1】top命令
語法格式:
top(選項)
選項如下:
-b:以批處理模式操作;
-c:顯示完整的治命令;
-d:螢幕重新整理間隔時間;
-I:忽略失效過程;
-s:保密模式;
-S:累積模式;
-i<時間>:設定間隔時間;
-u<使用者名稱>:指定使用者名稱;
-p<程序號>:指定程序;
-n<次數>:迴圈顯示的次數。
top互動命令
在top命令執行過程中可以使用的一些互動命令。這些命令都是單字母的,如果在命令列中使用了-s選項, 其中一些命令可能會被遮蔽。
h:顯示幫助畫面,給出一些簡短的命令總結說明;
k:終止一個程序;
i:忽略閒置和僵死程序,這是一個開關式命令;
q:退出程式;
r:重新安排一個程序的優先級別;
S:切換到累計模式;
s:改變兩次重新整理之間的延遲時間(單位為s),如果有小數,就換算成ms。
輸入0值則系統將不斷重新整理,預設值是5s;
f或者F:從當前顯示中新增或者刪除專案;
o或者O:改變顯示專案的順序;
l:切換顯示平均負載和啟動時間資訊;
m:切換顯示記憶體資訊;
t:切換顯示程序和CPU狀態資訊;
c:切換顯示命令名稱和完整命令列;
M:根據駐留記憶體大小進行排序;
P:根據CPU使用百分比大小進行排序;
T :根據時間/累計時間進行排序;
w:將當前設定寫入~/.toprc檔案中。
【2】命令例項
如下圖所示:
如上圖所示,分為兩塊,第一部分為綜合資料統計,第二部分為詳細程序列表。
① 第一部分
第一行:
top - 17:01:48 up , 1 user, load average: 0.61, 0.74, 0.95
解釋如下:
10:01:23 — 當前系統時間
8:30 — 系統已經運行了8小時30分鐘(在這期間沒有重啟過)
1 user — 當前有1個使用者登入系統
load average: 0.61, 0.74, 0.95
— load average後面的三個數分別是1 分鐘、5分鐘、15分鐘的負載情況。
第二行:
Tasks: 232 total, 1 running, 231 sleeping,
0 stopped, 0 zombie
解釋如下:
任務(程序),系統現在共有232個程序,其中處於執行中的有1個,
231個在休眠(sleep),stoped狀態的有0個,zombie狀態(殭屍)的有0個。
第三行
Cpu(s): 7.4%us, 0.0%sy, 0.0%ni, 92.5%id,
0.0%wa, 0.0%hi, 0.0%si, 0.0%st
解釋如下:
cpu狀態
7.4% us — 使用者空間佔用CPU的百分比。
0.0% sy — 核心空間佔用CPU的百分比。
0.0% ni — 改變過優先順序的程序佔用CPU的百分比
92.5% id — 空閒CPU百分比
0.0% wa — IO等待佔用CPU的百分比
0.0% hi — 硬中斷(Hardware IRQ)佔用CPU的百分比
0.0% si — 軟中斷(Software Interrupts)佔用CPU的百分比
Cpu(s)表示的是 所有使用者程序佔用整個cpu的平均值,由於每個核心佔用的百分比不同,所以按平均值來算比較有參考意義。
第四行
Mem: 32876540k total, 8287760k used,
24588780k free, 182532k buffers
解釋如下:
記憶體狀態
32876540k total — 實體記憶體總量(32GB)
8287760k used — 使用中的記憶體總量(8GB)
24588780k free — 空閒記憶體總量(24G)
182532k buffers — 快取的記憶體量 (182M)
第四行中使用中的記憶體總量(used)指的是現在系統核心控制的記憶體數,空閒記憶體總量(free)是核心還未納入其管控範圍的數量。
納入核心管理的記憶體不見得都在使用中,還包括過去使用過的現在可以被重複利用的記憶體,核心並不把這些可被重新使用的記憶體交還到free中去,因此在linux上free記憶體會越來越少。
第五行
Swap: 10485756k total, 0k used,
10485756k free, 7071164k cached
解釋如下:
swap交換分割槽
10485756k total — 交換區總量(10GB)
0k used — 使用的交換區總量(0)
10485756k free — 空閒交換區總量(10GB)
7071164k cached — 緩衝的交換區總量(7GB)
如果出於習慣去計算可用記憶體數,這裡有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的cached,按這個公式此臺伺服器的可用記憶體:24588780+182532+7071164=31GB
對於記憶體監控,在top裡我們要時刻監控第五行swap交換分割槽的used,如果這個數值在不斷的變化,說明核心在不斷進行記憶體和swap的資料交換,這是真正的記憶體不夠用了。
② 第二部分
第二部分為程序的詳細資訊。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2179 mysql 20 0 4070m 587m 8252 S 60.8 1.8 387:28.83 mysqld
解釋如下:
各程序(任務)的狀態監控
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 — 程序名稱(命令名/命令列)
預設進入top時,各程序是按照CPU的佔用量來排序的。
其中%CPU需要注意一下,更新到現在CPU佔用百分比。也就是單位時間內程序使用的CPU時間/單位時間,如每隔1s,該程序有800ms佔用CPU,則該程序佔用CPU80%,如果是8核的,8個CPU全部跑滿,則CPU佔用率為800%
進入top檢視的時候,按“1”檢視如下:
第一部分中列出了8顆CPU的佔用情況。
【3】cat /proc/cpuinfo
可以使用如下命令檢視CPU的詳細資訊:
cat /proc/cpuinfo