linux 查看服务器性能常用命令
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
linux 查看服務(wù)器性能常用命令
一、top命令是Linux下常用的性能分析工具,能夠?qū)崟r(shí)顯示系統(tǒng)中各個(gè)進(jìn)程的資源占用狀況,類似于Windows的任務(wù)管理器
?
下面詳細(xì)介紹它的使用方法。top是一個(gè)動態(tài)顯示過程,即可以通過用戶按鍵來不斷刷新當(dāng)前狀態(tài).如果在前臺執(zhí)行該命令,它將獨(dú)占前臺,直到用戶終止該程序?yàn)橹?比較準(zhǔn)確的說,top命令提供了實(shí)時(shí)的對系統(tǒng)處理器的狀態(tài)監(jiān)視.它將顯示系統(tǒng)中CPU最“敏感”的任務(wù)列表.該命令可以按CPU使用.內(nèi)存使用和執(zhí)行時(shí)間對任務(wù)進(jìn)行排序;而且該命令的很多特性都可以通過交互式命令或者在個(gè)人定制文件中進(jìn)行設(shè)定.
1.命令格式:
top?[參數(shù)]
2.命令功能:
顯示當(dāng)前系統(tǒng)正在執(zhí)行的進(jìn)程的相關(guān)信息,包括進(jìn)程ID、內(nèi)存占用率、CPU占用率等
3.命令參數(shù):
-b?批處理
-c?顯示完整的治命令
-I?忽略失效過程
-s?保密模式
-S?累積模式
-i<時(shí)間>?設(shè)置間隔時(shí)間
-u<用戶名>?指定用戶名
-p<進(jìn)程號>?指定進(jìn)程
-n<次數(shù)>?循環(huán)顯示的次數(shù)
?
4.使用實(shí)例:
實(shí)例1:顯示進(jìn)程信息
命令:top
輸出:
?
代碼如下:
[root@TG1704 log]# top top - 14:06:23 up 70 days, 16:44, 2 users, load average: 1.25, 1.32, 1.35 Tasks: 206 total, 1 running, 205 sleeping, 0 stopped, 0 zombie Cpu(s): 5.9%us, 3.4%sy, 0.0%ni, 90.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 32949016k total, 14411180k used, 18537836k free, 169884k buffers Swap: 32764556k total, 0k used, 32764556k free, 3612636k cached</p>< p>PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND? 28894 root 22 0 1501m 405m 10m S 52.2 1.3 2534:16 java? 18249 root 18 0 3201m 1.9g 11m S 35.9 6.0 569:39.41 java? 2808 root 25 0 3333m 1.0g 11m S 24.3 3.1 526:51.85 java? 25668 root 23 0 3180m 704m 11m S 14.0 2.2 360:44.53 java? 574 root 25 0 3168m 611m 10m S 12.6 1.9 556:59.63 java? 1599 root 20 0 3237m 1.9g 11m S 12.3 6.2 262:01.14 java? 1008 root 21 0 3147m 842m 10m S 0.3 2.6 4:31.08 java? 13823 root 23 0 3031m 2.1g 10m S 0.3 6.8 176:57.34 java? 28218 root 15 0 12760 1168 808 R 0.3 0.0 0:01.43 top? 29062 root 20 0 1241m 227m 10m S 0.3 0.7 2:07.32 java? 1 root 15 0 10368 684 572 S 0.0 0.0 1:30.85 init? 2 root RT -5 0 0 0 S 0.0 0.0 0:01.01 migration/0? 3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0? 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0? 5 root RT -5 0 0 0 S 0.0 0.0 0:00.80 migration/1? 6 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1? 7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1? 8 root RT -5 0 0 0 S 0.0 0.0 0:20.59 migration/2? 9 root 34 19 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/2? 10 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/2? 11 root RT -5 0 0 0 S 0.0 0.0 0:23.66 migration/3? 12 root 34 19 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/3? 13 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/3? 14 root RT -5 0 0 0 S 0.0 0.0 0:20.29 migration/4? 15 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/4? 16 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/4? 17 root RT -5 0 0 0 S 0.0 0.0 0:23.07 migration/5? 18 root 34 19 0 0 0 S 0.0 0.0 0:00.07 ksoftirqd/5? 19 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/5? 20 root RT -5 0 0 0 S 0.0 0.0 0:17.16 migration/6? 21 root 34 19 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/6? 22 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/6? 23 root RT -5 0 0 0 S 0.0 0.0 0:58.28 migration/7?
top命令輸出內(nèi)容詳細(xì)說明:
統(tǒng)計(jì)信息區(qū):
前五行是當(dāng)前系統(tǒng)情況整體的統(tǒng)計(jì)信息區(qū)。下面我們看每一行信息的具體意義。
第一行,任務(wù)隊(duì)列信息,同?uptime?命令的執(zhí)行結(jié)果,具體參數(shù)說明情況如下:
14:06:23?—?當(dāng)前系統(tǒng)時(shí)間
up?70?days,?16:44?—?系統(tǒng)已經(jīng)運(yùn)行了70天16小時(shí)44分鐘(在這期間系統(tǒng)沒有重啟過的吆!)
2?users?—?當(dāng)前有2個(gè)用戶登錄系統(tǒng)
load?average:?1.15,?1.42,?1.44?—?load?average后面的三個(gè)數(shù)分別是1分鐘、5分鐘、15分鐘的負(fù)載情況。
load?average數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進(jìn)程數(shù),然后按特定算法計(jì)算出的數(shù)值。如果這個(gè)數(shù)除以邏輯CPU的數(shù)量,結(jié)果高于5的時(shí)候就表明系統(tǒng)在超負(fù)荷運(yùn)轉(zhuǎn)了。
第二行,Tasks?—?任務(wù)(進(jìn)程),具體信息說明如下:
系統(tǒng)現(xiàn)在共有206個(gè)進(jìn)程,其中處于運(yùn)行中的有1個(gè),205個(gè)在休眠(sleep),stoped狀態(tài)的有0個(gè),zombie狀態(tài)(僵尸)的有0個(gè)。
第三行,cpu狀態(tài)信息,具體屬性說明如下:
5.9%us?—?用戶空間占用CPU的百分比。
3.4%?sy?—?內(nèi)核空間占用CPU的百分比。
0.0%?ni?—?改變過優(yōu)先級的進(jìn)程占用CPU的百分比
90.4%?id?—?空閑CPU百分比
0.0%?wa?—?IO等待占用CPU的百分比
0.0%?hi?—?硬中斷(Hardware?IRQ)占用CPU的百分比
0.2%?si?—?軟中斷(Software?Interrupts)占用CPU的百分比
備注:在這里CPU的使用比率和windows概念不同,需要理解linux系統(tǒng)用戶空間和內(nèi)核空間的相關(guān)知識!
第四行,內(nèi)存狀態(tài),具體信息如下:
32949016k?total?—?物理內(nèi)存總量(32GB)
14411180k?used?—?使用中的內(nèi)存總量(14GB)
18537836k?free?—?空閑內(nèi)存總量(18GB)
169884k?buffers?—?緩存的內(nèi)存量?(169M)
第五行,swap交換分區(qū)信息,具體信息說明如下:
32764556k?total?—?交換區(qū)總量(32GB)
0k?used?—?使用的交換區(qū)總量(0K)
32764556k?free?—?空閑交換區(qū)總量(32GB)
3612636k?cached?—?緩沖的交換區(qū)總量(3.6GB)
?
備注:
第四行中使用中的內(nèi)存總量(used)指的是現(xiàn)在系統(tǒng)內(nèi)核控制的內(nèi)存數(shù),空閑內(nèi)存總量(free)是內(nèi)核還未納入其管控范圍的數(shù)量。納入內(nèi)核管理的內(nèi)存不見得都在使用中,還包括過去使用過的現(xiàn)在可以被重復(fù)利用的內(nèi)存,內(nèi)核并不把這些可被重新使用的內(nèi)存交還到free中去,因此在linux上free內(nèi)存會越來越少,但不用為此擔(dān)心。
如果出于習(xí)慣去計(jì)算可用內(nèi)存數(shù),這里有個(gè)近似的計(jì)算公式:第四行的free?+?第四行的buffers?+?第五行的cached,按這個(gè)公式此臺服務(wù)器的可用內(nèi)存:18537836k?+169884k?+3612636k?=?22GB左右。
對于內(nèi)存監(jiān)控,在top里我們要時(shí)刻監(jiān)控第五行swap交換分區(qū)的used,如果這個(gè)數(shù)值在不斷的變化,說明內(nèi)核在不斷進(jìn)行內(nèi)存和swap的數(shù)據(jù)交換,這是真正的內(nèi)存不夠用了。
第六行,空行。
第七行以下:各進(jìn)程(任務(wù))的狀態(tài)監(jiān)控,項(xiàng)目列信息說明如下:
PID?—?進(jìn)程id
USER?—?進(jìn)程所有者
PR?—?進(jìn)程優(yōu)先級
NI?—?nice值。負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級
VIRT?—?進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
RES?—?進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
SHR?—?共享內(nèi)存大小,單位kb
S?—?進(jìn)程狀態(tài)。D=不可中斷的睡眠狀態(tài)?R=運(yùn)行?S=睡眠?T=跟蹤/停止?Z=僵尸進(jìn)程
%CPU?—?上次更新到現(xiàn)在的CPU時(shí)間占用百分比
%MEM?—?進(jìn)程使用的物理內(nèi)存百分比
TIME+?—?進(jìn)程使用的CPU時(shí)間總計(jì),單位1/100秒
COMMAND?—?進(jìn)程名稱(命令名/命令行)
?
其他使用技巧:
1.多U多核CPU監(jiān)控
在top基本視圖中,按鍵盤數(shù)字“1”,可監(jiān)控每個(gè)邏輯CPU的狀況:
?
觀察上圖,服務(wù)器有16個(gè)邏輯CPU,實(shí)際上是4個(gè)物理CPU。再按數(shù)字鍵1,就會返回到top基本視圖界面。
2.高亮顯示當(dāng)前運(yùn)行進(jìn)程
敲擊鍵盤“b”(打開/關(guān)閉加亮效果),top的視圖變化如下:
? ???
我們發(fā)現(xiàn)進(jìn)程id為2570的“top”進(jìn)程被加亮了,top進(jìn)程就是視圖第二行顯示的唯一的運(yùn)行態(tài)(runing)的那個(gè)進(jìn)程,可以通過敲擊“y”鍵關(guān)閉或打開運(yùn)行態(tài)進(jìn)程的加亮效果。
3.進(jìn)程字段排序
默認(rèn)進(jìn)入top時(shí),各進(jìn)程是按照CPU的占用量來排序的,在下圖中進(jìn)程ID為28894的java進(jìn)程排在第一(cpu占用142%),進(jìn)程ID為574的java進(jìn)程排在第二(cpu占用16%)。
? ? ??
? ? 敲擊鍵盤“x”(打開/關(guān)閉排序列的加亮效果),top的視圖變化如下:
? ? ???
可以看到,top默認(rèn)的排序列是“%CPU”。
4.?通過”shift?+?>”或”shift?+?<”可以向右或左改變排序列
下圖是按一次”shift?+?>”的效果圖,視圖現(xiàn)在已經(jīng)按照%MEM來排序。
? ? ? ??
實(shí)例2:顯示?完整命令
命令:top?-c
輸出:
? ? ??
實(shí)例3:以批處理模式顯示程序信息
命令:top?-b
實(shí)例4:以累積模式顯示程序信息
命令:top?-S
實(shí)例5:設(shè)置信息更新次數(shù)
命令:top?-n?2
說明:表示更新兩次后終止更新顯示
實(shí)例6:設(shè)置信息更新時(shí)間
命令:top?-d?3
說明:表示更新周期為3秒
實(shí)例7:顯示指定的進(jìn)程信息
命令:top?-p?574
輸出:
5.top交互命令
在top?命令執(zhí)行過程中可以使用的一些交互命令。這些命令都是單字母的,如果在命令行中使用了s?選項(xiàng),?其中一些命令可能會被屏蔽。
h?顯示幫助畫面,給出一些簡短的命令總結(jié)說明
k?終止一個(gè)進(jìn)程。
i?忽略閑置和僵死進(jìn)程。這是一個(gè)開關(guān)式命令。
q?退出程序
r?重新安排一個(gè)進(jìn)程的優(yōu)先級別
S?切換到累計(jì)模式
s?改變兩次刷新之間的延遲時(shí)間(單位為s),如果有小數(shù),就換算成m?s。輸入0值則系統(tǒng)將不斷刷新,默認(rèn)值是5?s
f或者F?從當(dāng)前顯示中添加或者刪除項(xiàng)目
o或者O?改變顯示項(xiàng)目的順序
l?切換顯示平均負(fù)載和啟動時(shí)間信息
m?切換顯示內(nèi)存信息
t?切換顯示進(jìn)程和CPU狀態(tài)信息
c?切換顯示命令名稱和完整命令行
M?根據(jù)駐留內(nèi)存大小進(jìn)行排序
P?根據(jù)CPU使用百分比大小進(jìn)行排序
T?根據(jù)時(shí)間/累計(jì)時(shí)間進(jìn)行排序
W?將當(dāng)前設(shè)置寫入~/.toprc文件中 ?
?
二、要對系統(tǒng)中進(jìn)程進(jìn)行監(jiān)測控制,用 ps 命令滿足你。
/bin/ps
ps 是顯示瞬間行程的狀態(tài),并不動態(tài)連續(xù);如果想對進(jìn)程運(yùn)行時(shí)間監(jiān)控,應(yīng)該用 top 工具。
kill 用于殺死進(jìn)程。
==============ps 的參數(shù)說明============================
l 長格式輸出;
u 按用戶名和啟動時(shí)間的順序來顯示進(jìn)程;
j 用任務(wù)格式來顯示進(jìn)程;
f 用樹形格式來顯示進(jìn)程;
a 顯示所有用戶的所有進(jìn)程(包括其它用戶);
x 顯示無控制終端的進(jìn)程;
r 顯示運(yùn)行中的進(jìn)程;
ww 避免詳細(xì)參數(shù)被截?cái)?#xff1b;
-A 列出所有的行程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細(xì)的資訊
-aux 顯示所有包含其他使用者的行程
-e 顯示所有進(jìn)程,環(huán)境變量
-f 全格式
-h 不顯示標(biāo)題
-l 長格式
-w 寬輸出
a?? 顯示終端上地所有進(jìn)程,包括其他用戶地進(jìn)程
r?? 只顯示正在運(yùn)行地進(jìn)程
x?? 顯示沒有控制終端地進(jìn)程
我們常用的選項(xiàng)是組合是 aux 或 lax,還有參數(shù) f 的應(yīng)用。
O[+|-] k1 [,[+|-] k2 [,…]] 根據(jù)SHORT KEYS、k1、k2中快捷鍵指定地多級排序順序顯示進(jìn)程列表.
對于ps地不同格式都存在著默認(rèn)地順序指定.這些默認(rèn)順序可以被用戶地指定所覆蓋.在這里面“+”字符是可選地,“-”字符是倒轉(zhuǎn)指定鍵地方向.
pids只列出進(jìn)程標(biāo)識符,之間運(yùn)用逗號分隔.該進(jìn)程列表必須在命令行參數(shù)地最后一個(gè)選項(xiàng)后面緊接著給出,中間不能插入空格.比如:ps -f1,4,5.
下介紹長命令行選項(xiàng),這些選項(xiàng)都運(yùn)用“--”開頭:
--sort X[+|-] key [,[+|-] key [,…]] 從SORT KEYS段中選一個(gè)多字母鍵.“+”字符是可選地,因?yàn)槟J(rèn)地方向就是按數(shù)字升序或者詞典順序.比如: ps -jax -sort=uid,-
ppid,+pid.
--help 顯示幫助信息.
--version 顯示該命令地版本信息.
在前面地選項(xiàng)說明中提到了排序鍵,接下來對排序鍵作進(jìn)一步說明.需要注意地是排序中運(yùn)用地值是ps運(yùn)用地內(nèi)部值,并非僅用于某些輸出格式地偽值.排序鍵列表見下表.
============排序鍵列表==========================
c cmd?? 可執(zhí)行地簡單名稱?
C cmdline?? 完整命令行?
f flags?? 長模式標(biāo)志?
g pgrp?? 進(jìn)程地組ID?
G tpgid?? 控制tty進(jìn)程組ID?
j cutime?? 累計(jì)用戶時(shí)間?
J cstime?? 累計(jì)系統(tǒng)時(shí)間?
k utime?? 用戶時(shí)間?
K stime?? 系統(tǒng)時(shí)間?
m min_flt?? 次要頁錯(cuò)誤地?cái)?shù)量?
M maj_flt?? 重點(diǎn)頁錯(cuò)誤地?cái)?shù)量?
n cmin_flt 累計(jì)次要頁錯(cuò)誤?
N cmaj_flt 累計(jì)重點(diǎn)頁錯(cuò)誤?
o session?? 對話ID?
p pid?? 進(jìn)程ID?
P ppid?? 父進(jìn)程ID?
r rss?? 駐留大小?
R resident 駐留頁?
s size?? 內(nèi)存大小(千字節(jié))?
S share?? 共享頁地?cái)?shù)量?
t tty?? tty次要設(shè)備號?
T start_time 進(jìn)程啟動地時(shí)間?
U uid?? UID
u user?? 用戶名
v vsize?? 總地虛擬內(nèi)存數(shù)量(字節(jié))?
y priority 內(nèi)核調(diào)度優(yōu)先級
================================================
=================ps aux 或 lax 輸出的解釋=========================
2、ps aux 或 lax 輸出的解釋
au(x) 輸出格式 :?
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 進(jìn)程所有者
PID: 進(jìn)程ID
%CPU: 占用的 CPU 使用率
%MEM: 占用的內(nèi)存使用率
VSZ: 占用的虛擬內(nèi)存大小
RSS: 占用的內(nèi)存大小
TTY: 終端的次要裝置號碼 (minor device number of tty)
STAT: 進(jìn)程狀態(tài):
START: 啟動進(jìn)程的時(shí)間;?
TIME: 進(jìn)程消耗CPU的時(shí)間;
COMMAND:命令的名稱和參數(shù);
=================進(jìn)程STAT狀態(tài)====================
D 無法中斷的休眠狀態(tài)(通常 IO 的進(jìn)程);?
R 正在運(yùn)行,在可中斷隊(duì)列中;?
S 處于休眠狀態(tài),靜止?fàn)顟B(tài);?
T 停止或被追蹤,暫停執(zhí)行;?
W 進(jìn)入內(nèi)存交換(從內(nèi)核2.6開始無效);?
X 死掉的進(jìn)程;?
Z 僵尸進(jìn)程不存在但暫時(shí)無法消除;
W: 沒有足夠的記憶體分頁可分配
WCHAN 正在等待的進(jìn)程資源;
<: 高優(yōu)先級進(jìn)程
N: 低優(yōu)先序進(jìn)程
L: 有記憶體分頁分配并鎖在記憶體內(nèi) (即時(shí)系統(tǒng)或捱A I/O),即,有些頁被鎖進(jìn)內(nèi)存
s 進(jìn)程的領(lǐng)導(dǎo)者(在它之下有子進(jìn)程);?
l 多進(jìn)程的(使用 CLONE_THREAD, 類似 NPTL pthreads);?
+ 位于后臺的進(jìn)程組;
================kill 終止進(jìn)程=========================
kill 終止進(jìn)程
有十幾種控制進(jìn)程的方法,下面是一些常用的方法:
kill -STOP [pid]?
發(fā)送SIGSTOP (17,19,23)停止一個(gè)進(jìn)程,而并不消滅這個(gè)進(jìn)程。
kill -CONT [pid]?
發(fā)送SIGCONT (19,18,25)重新開始一個(gè)停止的進(jìn)程。
kill -KILL [pid]?
發(fā)送SIGKILL (9)強(qiáng)迫進(jìn)程立即停止,并且不實(shí)施清理操作。
kill -9 -1?
終止你擁有的全部進(jìn)程。
SIGKILL 和 SIGSTOP 信號不能被捕捉、封鎖或者忽略,但是,其它的信號可以。所以這是你的終極武器。
=================范例========================
$ ps PID TTY TIME COMMAND 5800 ttyp0 00:00:00 bash 5835 ttyp0 00:00:00 ps
可以看到,顯示地項(xiàng)目共分為四項(xiàng),依次為PID(進(jìn)程ID)、TTY(終端名稱)、TIME(進(jìn)程執(zhí)行時(shí)間)、COMMAND(該進(jìn)程地命令行輸入).
可以運(yùn)用u選項(xiàng)來查看進(jìn)程所有者及其他少許詳細(xì)信息,如下所示:
$ ps u USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u在bash進(jìn)程前面有條橫線,意味著該進(jìn)程便是用戶地登錄shell,所以對于一個(gè)登錄用戶來說帶短橫線地進(jìn)程只有一個(gè).還可以看到%CPU、%MEM兩個(gè)選項(xiàng),前者指該進(jìn)程占用地CPU時(shí)間
和總時(shí)間地百分比;后者指該進(jìn)程占用地內(nèi)存和總內(nèi)存地百分比.
在這種情況下看到了所有控制終端地進(jìn)程;當(dāng)然對于其他那些沒有控制終端地進(jìn)程還是沒有觀察到,所以這時(shí)就需要運(yùn)用x選項(xiàng).運(yùn)用x選項(xiàng)可以觀察到所有地進(jìn)程情況.
1)ps a 顯示現(xiàn)行終端機(jī)下的所有程序,包括其他用戶的程序。
2)ps -A 顯示所有程序。
3)ps c 列出程序時(shí),顯示每個(gè)程序真正的指令名稱,而不包含路徑,參數(shù)或常駐服務(wù)的標(biāo)示。
4)ps -e 此參數(shù)的效果和指定"A"參數(shù)相同。
5)ps e 列出程序時(shí),顯示每個(gè)程序所使用的環(huán)境變量。
6)ps f 用ASCII字符顯示樹狀結(jié)構(gòu),表達(dá)程序間的相互關(guān)系。
7)ps -H 顯示樹狀結(jié)構(gòu),表示程序間的相互關(guān)系。
8)ps -N 顯示所有的程序,除了執(zhí)行ps指令終端機(jī)下的程序之外。
9)ps s 采用程序信號的格式顯示程序狀況。
10)ps S 列出程序時(shí),包括已中斷的子程序資料。
11)ps -t<終端機(jī)編號> 指定終端機(jī)編號,并列出屬于該終端機(jī)的程序的狀況。
12)ps u 以用戶為主的格式來顯示程序狀況。
13)ps x 顯示所有程序,不以終端機(jī)來區(qū)分。
?
三、虛擬內(nèi)存的實(shí)時(shí)監(jiān)控工具vmstat命令是最常見的Linux/Unix監(jiān)控工具,可以展現(xiàn)給定時(shí)間間隔的服務(wù)器的狀態(tài)值,包括服務(wù)器的CPU使用率,內(nèi)存使用,虛擬內(nèi)存交換情況,IO讀寫情況。這個(gè)命令是我查看Linux/Unix最喜愛的命令,一個(gè)是Linux/Unix都支持,二是相比top,我可以看到整個(gè)機(jī)器的CPU,內(nèi)存,IO的使用情況,而不是單單看到各個(gè)進(jìn)程的CPU使用率和內(nèi)存使用率(使用場景不一樣)。
一般vmstat工具的使用是通過兩個(gè)數(shù)字參數(shù)來完成的,第一個(gè)參數(shù)是采樣的時(shí)間間隔數(shù),單位是秒,第二個(gè)參數(shù)是采樣的次數(shù),如:
root@ubuntu:~# vmstat?2?1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo?in?cs us sy id wa 1?0?0?3498472?315836?3819540?0?0?0?1?2?0?0?0?100?02表示每個(gè)兩秒采集一次服務(wù)器狀態(tài),1表示只采集一次。
實(shí)際上,在應(yīng)用過程中,我們會在一段時(shí)間內(nèi)一直監(jiān)控,不想監(jiān)控直接結(jié)束vmstat就行了,例如:
root@ubuntu:~# vmstat?2? procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo?in?cs us sy id wa 1?0?0?3499840?315836?3819660?0?0?0?1?2?0?0?0?100?0 0?0?0?3499584?315836?3819660?0?0?0?0?88?158?0?0?100?0 0?0?0?3499708?315836?3819660?0?0?0?2?86?162?0?0?100?0 0?0?0?3499708?315836?3819660?0?0?0?10?81?151?0?0?100?0 1?0?0?3499732?315836?3819660?0?0?0?2?83?154?0?0?100?0這表示vmstat每2秒采集數(shù)據(jù),一直采集,直到我結(jié)束程序,這里采集了5次數(shù)據(jù)我就結(jié)束了程序。
好了,命令介紹完畢,現(xiàn)在開始實(shí)戰(zhàn)講解每個(gè)參數(shù)的意思。
r?表示運(yùn)行隊(duì)列(就是說多少個(gè)進(jìn)程真的分配到CPU),我測試的服務(wù)器目前CPU比較空閑,沒什么程序在跑,當(dāng)這個(gè)值超過了CPU數(shù)目,就會出現(xiàn)CPU瓶頸了。這個(gè)也和top的負(fù)載有關(guān)系,一般負(fù)載超過了3就比較高,超過了5就高,超過了10就不正常了,服務(wù)器的狀態(tài)很危險(xiǎn)。top的負(fù)載類似每秒的運(yùn)行隊(duì)列。如果運(yùn)行隊(duì)列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。
b?表示阻塞的進(jìn)程,這個(gè)不多說,進(jìn)程阻塞,大家懂的。
swpd?虛擬內(nèi)存已使用的大小,如果大于0,表示你的機(jī)器物理內(nèi)存不足了,如果不是程序內(nèi)存泄露的原因,那么你該升級內(nèi)存了或者把耗內(nèi)存的任務(wù)遷移到其他機(jī)器。
free?? 空閑的物理內(nèi)存的大小,我的機(jī)器內(nèi)存總共8G,剩余3415M。
buff?? Linux/Unix系統(tǒng)是用來存儲,目錄里面有什么內(nèi)容,權(quán)限等的緩存,我本機(jī)大概占用300多M
cache?cache直接用來記憶我們打開的文件,給文件做緩沖,我本機(jī)大概占用300多M(這里是Linux/Unix的聰明之處,把空閑的物理內(nèi)存的一部分拿來做文件和目錄的緩存,是為了提高 程序執(zhí)行的性能,當(dāng)程序使用內(nèi)存時(shí),buffer/cached會很快地被使用。)
si??每秒從磁盤讀入虛擬內(nèi)存的大小,如果這個(gè)值大于0,表示物理內(nèi)存不夠用或者內(nèi)存泄露了,要查找耗內(nèi)存進(jìn)程解決掉。我的機(jī)器內(nèi)存充裕,一切正常。
so??每秒虛擬內(nèi)存寫入磁盤的大小,如果這個(gè)值大于0,同上。
bi??每秒從塊設(shè)備接收的塊數(shù)量,這里的塊設(shè)備是指系統(tǒng)上所有的磁盤和其他塊設(shè)備,默認(rèn)塊大小是1024byte,我本機(jī)上沒什么IO操作,所以一直是0,但是我曾在處理拷貝大量數(shù)據(jù)(2-3T)的機(jī)器上看過可以達(dá)到140000/s,磁盤寫入速度差不多140M每秒
bo?每秒向塊設(shè)備發(fā)送的塊數(shù)量,例如我們讀取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO過于頻繁,需要調(diào)整。
in?每秒CPU的中斷次數(shù),包括時(shí)間中斷
cs?每秒上下文切換次數(shù),例如我們調(diào)用系統(tǒng)函數(shù),就要進(jìn)行上下文切換,線程的切換,也要進(jìn)程上下文切換,這個(gè)值要越小越好,太大了,要考慮調(diào)低線程或者進(jìn)程的數(shù)目,例如在apache和nginx這種web服務(wù)器中,我們一般做性能測試時(shí)會進(jìn)行幾千并發(fā)甚至幾萬并發(fā)的測試,選擇web服務(wù)器的進(jìn)程可以由進(jìn)程或者線程的峰值一直下調(diào),壓測,直到cs到一個(gè)比較小的值,這個(gè)進(jìn)程和線程數(shù)就是比較合適的值了。系統(tǒng)調(diào)用也是,每次調(diào)用系統(tǒng)函數(shù),我們的代碼就會進(jìn)入內(nèi)核空間,導(dǎo)致上下文切換,這個(gè)是很耗資源,也要盡量避免頻繁調(diào)用系統(tǒng)函數(shù)。上下文切換次數(shù)過多表示你的CPU大部分浪費(fèi)在上下文切換,導(dǎo)致CPU干正經(jīng)事的時(shí)間少了,CPU沒有充分利用,是不可取的。
us?用戶CPU時(shí)間,我曾經(jīng)在一個(gè)做加密解密很頻繁的服務(wù)器上,可以看到us接近100,r運(yùn)行隊(duì)列達(dá)到80(機(jī)器在做壓力測試,性能表現(xiàn)不佳)。
sy?系統(tǒng)CPU時(shí)間,如果太高,表示系統(tǒng)調(diào)用時(shí)間長,例如是IO操作頻繁。
id??空閑 CPU時(shí)間,一般來說,id + us + sy = 100,一般我認(rèn)為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統(tǒng)CPU使用率。
wt?等待IO CPU時(shí)間。
?
?
? Procs
?????? r: The number of processes waiting for run time.
?????? b: The number of processes in uninterruptible sleep.
?? Memory
?????? swpd: the amount of virtual memory used.
?????? free: the amount of idle memory.
?????? buff: the amount of memory used as buffers.
?????? cache: the amount of memory used as cache.
?????? inact: the amount of inactive memory. (-a option)
?????? active: the amount of active memory. (-a option)
?? Swap
?????? si: Amount of memory swapped in from disk (/s).
?????? so: Amount of memory swapped to disk (/s).
?? IO
?????? bi: Blocks received from a block device (blocks/s).
?????? bo: Blocks sent to a block device (blocks/s).
?? System
?????? in: The number of interrupts per second, including the clock.
?????? cs: The number of context switches per second.
?? CPU
?????? These are percentages of total CPU time.
?????? us: Time spent running non-kernel code. (user time, including nice time)
?????? sy: Time spent running kernel code. (system time)
?????? id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
?????? wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
?????? st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
FIELD DESCRIPTION FOR DISK MODE
?? Reads
?????? total: Total reads completed successfully
?????? merged: grouped reads (resulting in one I/O)
?????? sectors: Sectors read successfully
?????? ms: milliseconds spent reading
?? Writes
?????? total: Total writes completed successfully
?????? merged: grouped writes (resulting in one I/O)
?????? sectors: Sectors written successfully
?????? ms: milliseconds spent writing
?? IO
?????? cur: I/O in progress
?????? s: seconds spent for I/O
FIELD DESCRIPTION FOR DISK PARTITION MODE
?????? reads: Total number of reads issued to this partition
?????? read sectors: Total read sectors for partition
?????? writes : Total number of writes issued to this partition
?????? requested writes: Total number of write requests made for partition
?????? delay is the delay between updates in seconds.? If no delay is specified, only one report is printed with the average values since boot.
?????? count is the number of updates.? If no count is specified and delay is defined, count defaults to infinity.
?????? The -d reports disk statistics (2.5.70 or above required)
?????? count is the number of updates.? If no count is specified and delay is defined, count defaults to infinity.
?????? The -d reports disk statistics (2.5.70 or above required)
?????? The -p followed by some partition name for detailed statistics (2.5.70 or above required)
?????? The -S followed by k or K or m or M switches outputs between 1000, 1024, 1000000, or 1048576 bytes
?????? The -V switch results in displaying version information.
FIELD DESCRIPTION FOR VM MODE
?? Procs
?????? r: The number of processes waiting for run time.
?????? b: The number of processes in uninterruptible sleep.
?? Memory
?????? swpd: the amount of virtual memory used.
?????? free: the amount of idle memory.
?????? buff: the amount of memory used as buffers.
?????? cache: the amount of memory used as cache.
?????? inact: the amount of inactive memory. (-a option)
?????? active: the amount of active memory. (-a option)
?? Swap
?????? si: Amount of memory swapped in from disk (/s).
?????? so: Amount of memory swapped to disk (/s).
?? IO
?????? bi: Blocks received from a block device (blocks/s).
?????? bo: Blocks sent to a block device (blocks/s).
?? System
?????? in: The number of interrupts per second, including the clock.
?????? cs: The number of context switches per second.
?? CPU
?
四、CPU的實(shí)時(shí)監(jiān)控工具mpstat是Multiprocessor Statistics的縮寫,是實(shí)時(shí)系統(tǒng)監(jiān)控工具。其報(bào)告與CPU的一些統(tǒng)計(jì)信息,這些信息存放在/proc/stat文件中。在多CPUs系統(tǒng)里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。mpstat最大的特點(diǎn)是:可以查看多核心cpu中每個(gè)計(jì)算核心的統(tǒng)計(jì)數(shù)據(jù);而類似工具vmstat只能查看系統(tǒng)整體cpu情況。
?
語法
mpstat [-P {|ALL}] [internal [count]] 參數(shù) 解釋 -P {|ALL} 表示監(jiān)控哪個(gè)CPU, cpu在[0,cpu個(gè)數(shù)-1]中取值 internal 相鄰的兩次采樣的間隔時(shí)間、 count 采樣的次數(shù),count只能和delay一起使用 當(dāng)沒有參數(shù)時(shí),mpstat則顯示系統(tǒng)啟動以后所有信息的平均值。有interval時(shí),第一行的信息自系統(tǒng)啟動以來的平均信息。從第二行開始,輸出為前一個(gè)interval時(shí)間段的平均信息。?
實(shí)例
查看多核CPU核心的當(dāng)前運(yùn)行狀況信息, 每2秒更新一次
mpstat 219:45:12 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 19:45:14 all 0.04 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.96 19:45:16 all 0.00 0.00 0.00 0.03 0.00 0.00 0.00 0.00 99.97 19:45:18 all 0.00 0.07 0.07 0.00 0.00 0.00 0.00 0.00 99.87?
如果要看每個(gè)cpu核心的詳細(xì)當(dāng)前運(yùn)行狀況信息,輸出如下:
mpstat -P ALL 219:43:58 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 19:43:59 all 0.00 0.00 0.04 0.00 0.00 0.00 0.00 0.00 99.96 19:43:59 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 19:43:59 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 ....... 19:43:59 13 0.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.01 19:43:59 14 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 19:43:59 15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00字段的含義如下
%user 在internal時(shí)間段里,用戶態(tài)的CPU時(shí)間(%),不包含nice值為負(fù)進(jìn)程 (usr/total)*100 %nice 在internal時(shí)間段里,nice值為負(fù)進(jìn)程的CPU時(shí)間(%) (nice/total)*100 %sys 在internal時(shí)間段里,內(nèi)核時(shí)間(%) (system/total)*100 %iowait 在internal時(shí)間段里,硬盤IO等待時(shí)間(%) (iowait/total)*100 %irq 在internal時(shí)間段里,硬中斷時(shí)間(%) (irq/total)*100 %soft 在internal時(shí)間段里,軟中斷時(shí)間(%) (softirq/total)*100 %idle 在internal時(shí)間段里,CPU除去等待磁盤IO操作外的因?yàn)槿魏卧蚨臻e的時(shí)間閑置時(shí)間(%) (idle/total)*100計(jì)算公式如下
total_cur=user+system+nice+idle+iowait+irq+softirq total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq user=user_cur – user_pre total=total_cur-total_pre 其中_cur 表示當(dāng)前值,_pre表示interval時(shí)間前的值。上表中的所有值可取到兩位小數(shù)點(diǎn)。五、設(shè)備IO負(fù)載的實(shí)時(shí)監(jiān)控工具 ?iostat主要用于監(jiān)控系統(tǒng)設(shè)備的IO負(fù)載情況,iostat首次運(yùn)行時(shí)顯示自系統(tǒng)啟動開始的各項(xiàng)統(tǒng)計(jì)信息,之后運(yùn)行iostat將顯示自上次運(yùn)行該命令以后的統(tǒng)計(jì)信息。用戶可以通過指定統(tǒng)計(jì)的次數(shù)和時(shí)間來獲得所需的統(tǒng)計(jì)信息。它的特點(diǎn)是匯報(bào)磁盤活動統(tǒng)計(jì)情況,同時(shí)也會匯報(bào)出CPU使用情況。同vmstat一樣,iostat也有一個(gè)弱點(diǎn),就是它不能對某個(gè)進(jìn)程進(jìn)行深入分析,僅對系統(tǒng)的整體情況進(jìn)行分析。iostat屬于sysstat軟件包。可以用yum?install?sysstat?直接安裝。
1.命令格式:
iostat[參數(shù)][時(shí)間][次數(shù)]
2.命令功能:
? 通過iostat方便查看CPU、網(wǎng)卡、tty設(shè)備、磁盤、CD-ROM?等等設(shè)備的活動情況, 負(fù)載信息。
3.命令參數(shù):
-C?顯示CPU使用情況
-d?顯示磁盤使用情況
-k?以?KB?為單位顯示
-m?以?M?為單位顯示
-N?顯示磁盤陣列(LVM)?信息
-n?顯示NFS?使用情況
-p[磁盤]?顯示磁盤和分區(qū)的情況
-t?顯示終端和CPU的信息
-x?顯示詳細(xì)信息
-V?顯示版本信息
4.使用實(shí)例:
iostat -d -k 2參數(shù) -d 表示,顯示設(shè)備(磁盤)使用狀態(tài);-k某些使用block為單位的列強(qiáng)制使用Kilobytes為單位;2表示,數(shù)據(jù)顯示每隔2秒刷新一次。
輸出如下
iostat -d -k 1 10 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 39.29 21.14 1.44 441339807 29990031 sda1 0.00 0.00 0.00 1623 523 sda2 1.32 1.43 4.54 29834273 94827104 sda3 6.30 0.85 24.95 17816289 520725244 sda5 0.85 0.46 3.40 9543503 70970116 sda6 0.00 0.00 0.00 550 236 sda7 0.00 0.00 0.00 406 0 sda8 0.00 0.00 0.00 406 0 sda9 0.00 0.00 0.00 406 0 sda10 60.68 18.35 71.43 383002263 1490928140Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 327.55 5159.18 102.04 5056 100 sda1 0.00 0.00 0.00 0 0輸出信息的意義
tps:該設(shè)備每秒的傳輸次數(shù)(Indicate the number of transfers per second that were issued to the device.)。"一次傳輸"意思是"一次I/O請求"。多個(gè)邏輯請求可能會被合并為"一次I/O請求"。"一次傳輸"請求的大小是未知的。kB_read/s:每秒從設(shè)備(drive expressed)讀取的數(shù)據(jù)量; kB_wrtn/s:每秒向設(shè)備(drive expressed)寫入的數(shù)據(jù)量; kB_read:讀取的總數(shù)據(jù)量; kB_wrtn:寫入的總數(shù)量數(shù)據(jù)量;這些單位都為Kilobytes。上面的例子中,我們可以看到磁盤sda以及它的各個(gè)分區(qū)的統(tǒng)計(jì)數(shù)據(jù),當(dāng)時(shí)統(tǒng)計(jì)的磁盤總TPS是39.29,下面是各個(gè)分區(qū)的TPS。(因?yàn)槭撬查g值,所以總TPS并不嚴(yán)格等于各個(gè)分區(qū)TPS的總和)
?
指定監(jiān)控的設(shè)備名稱為sda,該命令的輸出結(jié)果和上面命令完全相同。
iostat -d sda 2默認(rèn)監(jiān)控所有的硬盤設(shè)備,現(xiàn)在指定只監(jiān)控sda。?
?
-x 參數(shù)
iostat還有一個(gè)比較常用的選項(xiàng)-x,該選項(xiàng)將用于顯示和io相關(guān)的擴(kuò)展數(shù)據(jù)。
iostat -d -x -k 1 10 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 1.56 28.31 7.80 31.49 42.51 2.92 21.26 1.46 1.16 0.03 0.79 2.62 10.28 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 2.00 20.00 381.00 7.00 12320.00 216.00 6160.00 108.00 32.31 1.75 4.50 2.17 84.20?
輸出信息的含義
rrqm/s:每秒這個(gè)設(shè)備相關(guān)的讀取請求有多少被Merge了(當(dāng)系統(tǒng)調(diào)用需要讀取數(shù)據(jù)的時(shí)候,VFS將請求發(fā)到各個(gè)FS,如果FS發(fā)現(xiàn)不同的讀取請求讀取的是相同Block的數(shù)據(jù),FS會將這個(gè)請求合并Merge);wrqm/s:每秒這個(gè)設(shè)備相關(guān)的寫入請求有多少被Merge了。rsec/s:每秒讀取的扇區(qū)數(shù); wsec/:每秒寫入的扇區(qū)數(shù)。 rKB/s:The number of read requests that were issued to the device per second; wKB/s:The number of write requests that were issued to the device per second; avgrq-sz 平均請求扇區(qū)的大小 avgqu-sz 是平均請求隊(duì)列的長度。毫無疑問,隊(duì)列長度越短越好。 await: 每一個(gè)IO請求的處理的平均時(shí)間(單位是微秒毫秒)。這里可以理解為IO的響應(yīng)時(shí)間,一般地系統(tǒng)IO響應(yīng)時(shí)間應(yīng)該低于5ms,如果大于10ms就比較大了。這個(gè)時(shí)間包括了隊(duì)列時(shí)間和服務(wù)時(shí)間,也就是說,一般情況下,await大于svctm,它們的差值越小,則說明隊(duì)列時(shí)間越短,反之差值越大,隊(duì)列時(shí)間越長,說明系統(tǒng)出了問題。 svctm 表示平均每次設(shè)備I/O操作的服務(wù)時(shí)間(以毫秒為單位)。如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊(duì)列等待太長, 系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?%util: 在統(tǒng)計(jì)時(shí)間內(nèi)所有處理IO時(shí)間,除以總共統(tǒng)計(jì)時(shí)間。例如,如果統(tǒng)計(jì)間隔1秒,該設(shè)備有0.8秒在處理IO,而0.2秒閑置,那么該設(shè)備的%util = 0.8/1 = 80%,所以該參數(shù)暗示了設(shè)備的繁忙程度 。一般地,如果該參數(shù)是100%表示設(shè)備已經(jīng)接近滿負(fù)荷運(yùn)行了(當(dāng)然如果是多磁盤,即使%util是100%,因?yàn)榇疟P的并發(fā)能力,所以磁盤使用未必就到了瓶頸)。?-c 參數(shù)
iostat還可以用來獲取cpu部分狀態(tài)值:
iostat -c 1 10 avg-cpu: %user %nice %sys %iowait %idle 1.98 0.00 0.35 11.45 86.22 avg-cpu: %user %nice %sys %iowait %idle 1.62 0.00 0.25 34.46 63.67?常見用法
iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盤讀寫速度單位為KB) iostat -d -m 2 #查看TPS和吞吐量信息(磁盤讀寫速度單位為MB) iostat -d -x -k 1 10 #查看設(shè)備使用率(%util)、響應(yīng)時(shí)間(await) iostat -c 1 10 #查看cpu狀態(tài)?實(shí)例分析
ostat -d -k 1 |grep sda10 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda10 60.72 18.95 71.53 395637647 1493241908 sda10 299.02 4266.67 129.41 4352 132 sda10 483.84 4589.90 4117.17 4544 4076 sda10 218.00 3360.00 100.00 3360 100 sda10 546.00 8784.00 124.00 8784 124 sda10 827.00 13232.00 136.00 13232 136上面看到,磁盤每秒傳輸次數(shù)平均約400;每秒磁盤讀取約5MB,寫入約1MB。
?
iostat -d -x -k 1 Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 1.56 28.31 7.84 31.50 43.65 3.16 21.82 1.58 1.19 0.03 0.80 2.61 10.29 sda 1.98 24.75 419.80 6.93 13465.35 253.47 6732.67 126.73 32.15 2.00 4.70 2.00 85.25 sda 3.06 41.84 444.90 54.08 14204.08 2048.98 7102.04 1024.49 32.57 2.10 4.21 1.85 92.24可以看到磁盤的平均響應(yīng)時(shí)間<5ms,磁盤使用率>80。磁盤響應(yīng)正常,但是已經(jīng)很繁忙了。
六、查看當(dāng)前系統(tǒng)內(nèi)存使用狀況(free):
?? ?free命令有以下幾個(gè)常用選項(xiàng):
| 選項(xiàng) | 說明 |
| -b | 以字節(jié)為單位顯示數(shù)據(jù)。 |
| -k | 以千字節(jié)(KB)為單位顯示數(shù)據(jù)(缺省值)。 |
| -m | 以兆(MB)為單位顯示數(shù)據(jù)。 |
| -s delay | 該選項(xiàng)將使free持續(xù)不斷的刷新,每次刷新之間的間隔為delay指定的秒數(shù),如果含有小數(shù)點(diǎn),將精確到毫秒,如0.5為500毫秒,1為一秒。 |
??? free命令輸出的表格中包含以下幾列:
| 列名 | 說明 |
| total | 總計(jì)物理內(nèi)存的大小。 |
| used | 已使用的內(nèi)存數(shù)量。 |
| free | 可用的內(nèi)存數(shù)量。 |
| Shared | 多個(gè)進(jìn)程共享的內(nèi)存總額。 |
| Buffers/cached | 磁盤緩存的大小。 |
?? ?見以下具體示例和輸出說明:
?? ?/> free -k
?? ???????????????????? total???????? used????????? free???? shared??? buffers???? cached
?? ?Mem:?????? 1031320???? 671776???? 359544????????? 0????? 88796???? 352564
?? ?-/+ buffers/cache:????? 230416???? 800904
?? ?Swap:??????? 204792?????????? ?? 0???? 204792
?? ?對于free命令的輸出,我們只需關(guān)注紅色高亮的輸出行和綠色高亮的輸出行,見如下具體解釋:
?? ?紅色輸出行:該行使從操作系統(tǒng)的角度來看待輸出數(shù)據(jù)的,used(671776)表示內(nèi)核(Kernel)+Applications+buffers+cached。free(359544)表示系統(tǒng)還有多少內(nèi)存可供使用。
?? ?綠色輸出行:該行則是從應(yīng)用程序的角度來看輸出數(shù)據(jù)的。其free = 操作系統(tǒng)used + buffers + cached,既:
?? ?800904 = 359544 + 88796 + 352564
?? ?/> free -m
?? ???????????? ? ? ? total??????? used??????? free????? shared??? buffers???? cached
?? ?Mem:????????? 1007?????? ? 656??????? 351??????????? 0???????? 86??????????? 344
?? ?-/+ buffers/cache:??????? 225??????? 782
?? ?Swap:????????? 199???????????? 0??????? 199
??? /> free -k -s 1.5??#以千字節(jié)(KB)為單位顯示數(shù)據(jù),同時(shí)每隔1.5刷新輸出一次,直到按CTRL+C退出
?? ?????????????????? total??????? used?????? free???? shared??? buffers???? cached
?? ?Mem:????????? 1007???????? 655??????? 351????????? 0??????? ?? 86??????? 344
?? ?-/+ buffers/cache:??????? 224??????? 782
?? ?Swap:????????? 199???????? ? ? 0??????? 199
?? ?????????????????? total??????? used?????? free???? shared??? buffers???? cached
?? ?Mem:????????? 1007?????? ? 655??????? 351????????? 0??????? ?? 86??????? 344
?? ?-/+ buffers/cache:??????? 224??????? 782
?? ?Swap:????????? 199??????? ? ?? 0??????? 199
七、報(bào)告磁盤空間使用狀況(df):
?? ?該命令最為常用的選項(xiàng)就是-h,該選項(xiàng)將智能的輸出數(shù)據(jù)單位,以便使輸出的結(jié)果更具可讀性。
????/> df -h
?? ?Filesystem???????????? Size? Used?? Avail Use% Mounted on
?? ?/dev/sda1???????????? 5.8G? 3.3G? 2.2G? 61%?? /
?? ?tmpfs??????????????? ? 504M? 260K? 504M?? 1%? /dev/shm
八、評估磁盤的使用狀況(du):
| 選項(xiàng) | 說明 |
| -a | 包括了所有的文件,而不只是目錄。 |
| -b | 以字節(jié)為計(jì)算單位。 |
| -k | 以千字節(jié)(KB)為計(jì)算單位。 |
| -m | 以兆字節(jié)(MB)為計(jì)算單位。 |
| -h | 是輸出的信息更易于閱讀。 |
| -s | 只顯示工作目錄所占總空間。 |
| --exclude=PATTERN | 排除掉符合樣式的文件,Pattern就是普通的Shell樣式,?表示任何一個(gè)字符,*表示任意多個(gè)字符。 |
| --max-depth=N | 從當(dāng)前目錄算起,目錄深度大于N的子目錄將不被計(jì)算,該選項(xiàng)不能和s選項(xiàng)同時(shí)存在。? ? |
??? #僅顯示子一級目錄的信息。
????/> du --max-depth=1 -h
?? ?246M??? ./stephen
?? ?246M??? .????
????/> du -sh ./*?? #獲取當(dāng)前目錄下所有子目錄所占用的磁盤空間大小。
?? ?352K??? ./MemcachedTest
?? ?132K??? ./Test
?? ?33M???? ./thirdparty????
?? ?#在當(dāng)前目錄下,排除目錄名模式為Te*的子目錄(./Test),輸出其他子目錄占用的磁盤空間大小。
????/> du --exclude=Te* -sh ./* ?
?? ?352K??? ./MemcachedTest
?? ?33M???? ./thirdparty
?
sar
sar [options] [-A] [-o file] t [n]
在命令行中,n 和t 兩個(gè)參數(shù)組合起來定義采樣間隔和次數(shù),t為采樣間隔,是必須有
的參數(shù),n為采樣次數(shù),是可選的,默認(rèn)值是1,-o file表示將命令結(jié)果以二進(jìn)制格式
存放在文件中,file 在此處不是關(guān)鍵字,是文件名。options 為命令行選項(xiàng),sar命令
的選項(xiàng)很多,下面只列出常用選項(xiàng):
-A:所有報(bào)告的總和。
-u:CPU利用率
-v:進(jìn)程、I節(jié)點(diǎn)、文件和鎖表狀態(tài)。
-d:硬盤使用報(bào)告。
-r:內(nèi)存和交換空間的使用統(tǒng)計(jì)。
-g:串口I/O的情況。
-b:緩沖區(qū)使用情況。
-a:文件讀寫情況。
-c:系統(tǒng)調(diào)用情況。
-q:報(bào)告隊(duì)列長度和系統(tǒng)平均負(fù)載
-R:進(jìn)程的活動情況。
-y:終端設(shè)備活動情況。
-w:系統(tǒng)交換活動。
-x { pid | SELF | ALL }:報(bào)告指定進(jìn)程ID的統(tǒng)計(jì)信息,SELF關(guān)鍵字是sar進(jìn)程本身的統(tǒng)計(jì),ALL關(guān)鍵字是所有系統(tǒng)進(jìn)程的統(tǒng)計(jì)。
用sar進(jìn)行CPU利用率的分析
#sar -u 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain)? 03/28/2009
07:40:17 PM?????? CPU???? %user???? %nice?? %system?? %iowait??? %steal???? %idle
07:40:19 PM?????? all???????? 12.44????? 0.00???????? 6.97????????? 1.74???????? 0.00??????? 78.86
07:40:21 PM?????? all???????? 26.75????? 0.00??????? 12.50???????? 16.00?????? 0.00??????? 44.75
07:40:23 PM?????? all???????? 16.96????? 0.00???????? 7.98????????? 0.00???????? 0.00??????? 75.06
07:40:25 PM?????? all???????? 22.50????? 0.00???????? 7.00????????? 3.25???????? 0.00??????? 67.25
07:40:27 PM?????? all???????? 7.25??????? 0.00???????? 2.75????????? 2.50???????? 0.00??????? 87.50
07:40:29 PM?????? all???????? 20.05????? 0.00???????? 8.56????????? 2.93???????? 0.00??????? 68.46
07:40:31 PM?????? all???????? 13.97????? 0.00???????? 6.23????????? 3.49???????? 0.00??????? 76.31
07:40:33 PM?????? all???????? 8.25??????? 0.00???????? 0.75????????? 3.50???????? 0.00??????? 87.50
07:40:35 PM?????? all???????? 13.25????? 0.00???????? 5.75????????? 4.00???????? 0.00??????? 77.00
07:40:37 PM?????? all???????? 10.03????? 0.00???????? 0.50????????? 2.51???????? 0.00??????? 86.97
Average:???????????? all???????? 15.15????? 0.00???????? 5.91????????? 3.99???????? 0.00??????? 74.95
?
在顯示內(nèi)容包括:
%user:CPU處在用戶模式下的時(shí)間百分比。
??????? %nice:CPU處在帶NICE值的用戶模式下的時(shí)間百分比。
%system:CPU處在系統(tǒng)模式下的時(shí)間百分比。
%iowait:CPU等待輸入輸出完成時(shí)間的百分比。
??????? %steal:管理程序維護(hù)另一個(gè)虛擬處理器時(shí),虛擬CPU的無意識等待時(shí)間百分比。
%idle:CPU空閑時(shí)間百分比。
??????? 在所有的顯示中,我們應(yīng)主要注意%iowait和%idle,%iowait的值過高,表示硬盤存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高但系統(tǒng)響應(yīng)慢時(shí),有可能是CPU等待分配內(nèi)存,此時(shí)應(yīng)加大內(nèi)存容量。%idle值如果持續(xù)低于10,那么系統(tǒng)的CPU處理能力相對較低,表明系統(tǒng)中最需要解決的資源是CPU。
?
用sar進(jìn)行運(yùn)行進(jìn)程隊(duì)列長度分析:
#sar -q 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain)? 03/28/2009
07:58:14 PM?? runq-sz? plist-sz?? ldavg-1?? ldavg-5? ldavg-15
07:58:16 PM???????? 0???????? 493????????? 0.64??????? 0.56??????? 0.49
07:58:18 PM???????? 1???????? 491????????? 0.64??????? 0.56??????? 0.49
07:58:20 PM???????? 1???????? 488????????? 0.59??????? 0.55??????? 0.49
07:58:22 PM???????? 0???????? 487????????? 0.59??????? 0.55??????? 0.49
07:58:24 PM???????? 0???????? 485????????? 0.59??????? 0.55??????? 0.49
07:58:26 PM???????? 1???????? 483????????? 0.78??????? 0.59??????? 0.50
07:58:28 PM???????? 0???????? 481????????? 0.78??????? 0.59??????? 0.50
07:58:30 PM???????? 1???????? 480????????? 0.72??????? 0.58??????? 0.50
07:58:32 PM???????? 0???????? 477????????? 0.72??????? 0.58??????? 0.50
07:58:34 PM???????? 0???????? 474????????? 0.72??????? 0.58??????? 0.50
Average:?????????????? 0???????? 484????????? 0.68??????? 0.57??????? 0.49
?
runq-sz 準(zhǔn)備運(yùn)行的進(jìn)程運(yùn)行隊(duì)列。
plist-sz? 進(jìn)程隊(duì)列里的進(jìn)程和線程的數(shù)量
ldavg-1? 前一分鐘的系統(tǒng)平均負(fù)載(load average)
ldavg-5? 前五分鐘的系統(tǒng)平均負(fù)載(load average)
ldavg-15? 前15分鐘的系統(tǒng)平均負(fù)載(load average)
?
順便說一下load avarage的含義
load average可以理解為每秒鐘CPU等待運(yùn)行的進(jìn)程個(gè)數(shù).
在Linux系統(tǒng)中,sar -q、uptime、w、top等命令都會有系統(tǒng)平均負(fù)載load average的輸出,那么什么是系統(tǒng)平均負(fù)載呢?
系統(tǒng)平均負(fù)載被定義為在特定時(shí)間間隔內(nèi)運(yùn)行隊(duì)列中的平均任務(wù)數(shù)。如果一個(gè)進(jìn)程滿足以下條件則其就會位于運(yùn)行隊(duì)列中:
- 它沒有在等待I/O操作的結(jié)果
- 它沒有主動進(jìn)入等待狀態(tài)(也就是沒有調(diào)用'wait')
- 沒有被停止(例如:等待終止)
例如:
# uptime
20:55:40 up 24 days,? 3:06,? 1 user,? load average: 8.13, 5.90, 4.94
命令輸出的最后內(nèi)容表示在過去的1、5、15分鐘內(nèi)運(yùn)行隊(duì)列中的平均進(jìn)程數(shù)量。
一般來說只要每個(gè)CPU的當(dāng)前活動進(jìn)程數(shù)不大于3那么系統(tǒng)的性能就是良好的,如果每個(gè)CPU的任務(wù)數(shù)大于5,那么就表示這臺機(jī)器的性能有嚴(yán)重問題。對 于上面的例子來說,假設(shè)系統(tǒng)有兩個(gè)CPU,那么其每個(gè)CPU的當(dāng)前任務(wù)數(shù)為:8.13/2=4.065。這表示該系統(tǒng)的性能是可以接受的。
轉(zhuǎn)載于:https://my.oschina.net/u/3160044/blog/1927450
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的linux 查看服务器性能常用命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript 私有成员
- 下一篇: 并发编程 笔记