1. 程式人生 > >top命令檢視伺服器CPU與記憶體佔用

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.95load 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 — 使用的交換區總量(010485756k 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

這裡寫圖片描述