linux 查看服务器性能常用命令
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
linux 查看服務器性能常用命令
一、top命令是Linux下常用的性能分析工具,能夠實時顯示系統(tǒng)中各個進程的資源占用狀況,類似于Windows的任務管理器
?
下面詳細介紹它的使用方法。top是一個動態(tài)顯示過程,即可以通過用戶按鍵來不斷刷新當前狀態(tài).如果在前臺執(zhí)行該命令,它將獨占前臺,直到用戶終止該程序為止.比較準確的說,top命令提供了實時的對系統(tǒng)處理器的狀態(tài)監(jiān)視.它將顯示系統(tǒng)中CPU最“敏感”的任務列表.該命令可以按CPU使用.內存使用和執(zhí)行時間對任務進行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進行設定.
1.命令格式:
top?[參數(shù)]
2.命令功能:
顯示當前系統(tǒng)正在執(zhí)行的進程的相關信息,包括進程ID、內存占用率、CPU占用率等
3.命令參數(shù):
-b?批處理
-c?顯示完整的治命令
-I?忽略失效過程
-s?保密模式
-S?累積模式
-i<時間>?設置間隔時間
-u<用戶名>?指定用戶名
-p<進程號>?指定進程
-n<次數(shù)>?循環(huán)顯示的次數(shù)
?
4.使用實例:
實例1:顯示進程信息
命令: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命令輸出內容詳細說明:
統(tǒng)計信息區(qū):
前五行是當前系統(tǒng)情況整體的統(tǒng)計信息區(qū)。下面我們看每一行信息的具體意義。
第一行,任務隊列信息,同?uptime?命令的執(zhí)行結果,具體參數(shù)說明情況如下:
14:06:23?—?當前系統(tǒng)時間
up?70?days,?16:44?—?系統(tǒng)已經(jīng)運行了70天16小時44分鐘(在這期間系統(tǒng)沒有重啟過的吆!)
2?users?—?當前有2個用戶登錄系統(tǒng)
load?average:?1.15,?1.42,?1.44?—?load?average后面的三個數(shù)分別是1分鐘、5分鐘、15分鐘的負載情況。
load?average數(shù)據(jù)是每隔5秒鐘檢查一次活躍的進程數(shù),然后按特定算法計算出的數(shù)值。如果這個數(shù)除以邏輯CPU的數(shù)量,結果高于5的時候就表明系統(tǒng)在超負荷運轉了。
第二行,Tasks?—?任務(進程),具體信息說明如下:
系統(tǒng)現(xiàn)在共有206個進程,其中處于運行中的有1個,205個在休眠(sleep),stoped狀態(tài)的有0個,zombie狀態(tài)(僵尸)的有0個。
第三行,cpu狀態(tài)信息,具體屬性說明如下:
5.9%us?—?用戶空間占用CPU的百分比。
3.4%?sy?—?內核空間占用CPU的百分比。
0.0%?ni?—?改變過優(yōu)先級的進程占用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)用戶空間和內核空間的相關知識!
第四行,內存狀態(tài),具體信息如下:
32949016k?total?—?物理內存總量(32GB)
14411180k?used?—?使用中的內存總量(14GB)
18537836k?free?—?空閑內存總量(18GB)
169884k?buffers?—?緩存的內存量?(169M)
第五行,swap交換分區(qū)信息,具體信息說明如下:
32764556k?total?—?交換區(qū)總量(32GB)
0k?used?—?使用的交換區(qū)總量(0K)
32764556k?free?—?空閑交換區(qū)總量(32GB)
3612636k?cached?—?緩沖的交換區(qū)總量(3.6GB)
?
備注:
第四行中使用中的內存總量(used)指的是現(xiàn)在系統(tǒng)內核控制的內存數(shù),空閑內存總量(free)是內核還未納入其管控范圍的數(shù)量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現(xiàn)在可以被重復利用的內存,內核并不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。
如果出于習慣去計算可用內存數(shù),這里有個近似的計算公式:第四行的free?+?第四行的buffers?+?第五行的cached,按這個公式此臺服務器的可用內存:18537836k?+169884k?+3612636k?=?22GB左右。
對于內存監(jiān)控,在top里我們要時刻監(jiān)控第五行swap交換分區(qū)的used,如果這個數(shù)值在不斷的變化,說明內核在不斷進行內存和swap的數(shù)據(jù)交換,這是真正的內存不夠用了。
第六行,空行。
第七行以下:各進程(任務)的狀態(tài)監(jiān)控,項目列信息說明如下:
PID?—?進程id
USER?—?進程所有者
PR?—?進程優(yōu)先級
NI?—?nice值。負值表示高優(yōu)先級,正值表示低優(yōu)先級
VIRT?—?進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES?—?進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR?—?共享內存大小,單位kb
S?—?進程狀態(tài)。D=不可中斷的睡眠狀態(tài)?R=運行?S=睡眠?T=跟蹤/停止?Z=僵尸進程
%CPU?—?上次更新到現(xiàn)在的CPU時間占用百分比
%MEM?—?進程使用的物理內存百分比
TIME+?—?進程使用的CPU時間總計,單位1/100秒
COMMAND?—?進程名稱(命令名/命令行)
?
其他使用技巧:
1.多U多核CPU監(jiān)控
在top基本視圖中,按鍵盤數(shù)字“1”,可監(jiān)控每個邏輯CPU的狀況:
?
觀察上圖,服務器有16個邏輯CPU,實際上是4個物理CPU。再按數(shù)字鍵1,就會返回到top基本視圖界面。
2.高亮顯示當前運行進程
敲擊鍵盤“b”(打開/關閉加亮效果),top的視圖變化如下:
? ???
我們發(fā)現(xiàn)進程id為2570的“top”進程被加亮了,top進程就是視圖第二行顯示的唯一的運行態(tài)(runing)的那個進程,可以通過敲擊“y”鍵關閉或打開運行態(tài)進程的加亮效果。
3.進程字段排序
默認進入top時,各進程是按照CPU的占用量來排序的,在下圖中進程ID為28894的java進程排在第一(cpu占用142%),進程ID為574的java進程排在第二(cpu占用16%)。
? ? ??
? ? 敲擊鍵盤“x”(打開/關閉排序列的加亮效果),top的視圖變化如下:
? ? ???
可以看到,top默認的排序列是“%CPU”。
4.?通過”shift?+?>”或”shift?+?<”可以向右或左改變排序列
下圖是按一次”shift?+?>”的效果圖,視圖現(xiàn)在已經(jīng)按照%MEM來排序。
? ? ? ??
實例2:顯示?完整命令
命令:top?-c
輸出:
? ? ??
實例3:以批處理模式顯示程序信息
命令:top?-b
實例4:以累積模式顯示程序信息
命令:top?-S
實例5:設置信息更新次數(shù)
命令:top?-n?2
說明:表示更新兩次后終止更新顯示
實例6:設置信息更新時間
命令:top?-d?3
說明:表示更新周期為3秒
實例7:顯示指定的進程信息
命令:top?-p?574
輸出:
5.top交互命令
在top?命令執(zhí)行過程中可以使用的一些交互命令。這些命令都是單字母的,如果在命令行中使用了s?選項,?其中一些命令可能會被屏蔽。
h?顯示幫助畫面,給出一些簡短的命令總結說明
k?終止一個進程。
i?忽略閑置和僵死進程。這是一個開關式命令。
q?退出程序
r?重新安排一個進程的優(yōu)先級別
S?切換到累計模式
s?改變兩次刷新之間的延遲時間(單位為s),如果有小數(shù),就換算成m?s。輸入0值則系統(tǒng)將不斷刷新,默認值是5?s
f或者F?從當前顯示中添加或者刪除項目
o或者O?改變顯示項目的順序
l?切換顯示平均負載和啟動時間信息
m?切換顯示內存信息
t?切換顯示進程和CPU狀態(tài)信息
c?切換顯示命令名稱和完整命令行
M?根據(jù)駐留內存大小進行排序
P?根據(jù)CPU使用百分比大小進行排序
T?根據(jù)時間/累計時間進行排序
W?將當前設置寫入~/.toprc文件中 ?
?
二、要對系統(tǒng)中進程進行監(jiān)測控制,用 ps 命令滿足你。
/bin/ps
ps 是顯示瞬間行程的狀態(tài),并不動態(tài)連續(xù);如果想對進程運行時間監(jiān)控,應該用 top 工具。
kill 用于殺死進程。
==============ps 的參數(shù)說明============================
l 長格式輸出;
u 按用戶名和啟動時間的順序來顯示進程;
j 用任務格式來顯示進程;
f 用樹形格式來顯示進程;
a 顯示所有用戶的所有進程(包括其它用戶);
x 顯示無控制終端的進程;
r 顯示運行中的進程;
ww 避免詳細參數(shù)被截斷;
-A 列出所有的行程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細的資訊
-aux 顯示所有包含其他使用者的行程
-e 顯示所有進程,環(huán)境變量
-f 全格式
-h 不顯示標題
-l 長格式
-w 寬輸出
a?? 顯示終端上地所有進程,包括其他用戶地進程
r?? 只顯示正在運行地進程
x?? 顯示沒有控制終端地進程
我們常用的選項是組合是 aux 或 lax,還有參數(shù) f 的應用。
O[+|-] k1 [,[+|-] k2 [,…]] 根據(jù)SHORT KEYS、k1、k2中快捷鍵指定地多級排序順序顯示進程列表.
對于ps地不同格式都存在著默認地順序指定.這些默認順序可以被用戶地指定所覆蓋.在這里面“+”字符是可選地,“-”字符是倒轉指定鍵地方向.
pids只列出進程標識符,之間運用逗號分隔.該進程列表必須在命令行參數(shù)地最后一個選項后面緊接著給出,中間不能插入空格.比如:ps -f1,4,5.
下介紹長命令行選項,這些選項都運用“--”開頭:
--sort X[+|-] key [,[+|-] key [,…]] 從SORT KEYS段中選一個多字母鍵.“+”字符是可選地,因為默認地方向就是按數(shù)字升序或者詞典順序.比如: ps -jax -sort=uid,-
ppid,+pid.
--help 顯示幫助信息.
--version 顯示該命令地版本信息.
在前面地選項說明中提到了排序鍵,接下來對排序鍵作進一步說明.需要注意地是排序中運用地值是ps運用地內部值,并非僅用于某些輸出格式地偽值.排序鍵列表見下表.
============排序鍵列表==========================
c cmd?? 可執(zhí)行地簡單名稱?
C cmdline?? 完整命令行?
f flags?? 長模式標志?
g pgrp?? 進程地組ID?
G tpgid?? 控制tty進程組ID?
j cutime?? 累計用戶時間?
J cstime?? 累計系統(tǒng)時間?
k utime?? 用戶時間?
K stime?? 系統(tǒng)時間?
m min_flt?? 次要頁錯誤地數(shù)量?
M maj_flt?? 重點頁錯誤地數(shù)量?
n cmin_flt 累計次要頁錯誤?
N cmaj_flt 累計重點頁錯誤?
o session?? 對話ID?
p pid?? 進程ID?
P ppid?? 父進程ID?
r rss?? 駐留大小?
R resident 駐留頁?
s size?? 內存大小(千字節(jié))?
S share?? 共享頁地數(shù)量?
t tty?? tty次要設備號?
T start_time 進程啟動地時間?
U uid?? UID
u user?? 用戶名
v vsize?? 總地虛擬內存數(shù)量(字節(jié))?
y priority 內核調度優(yōu)先級
================================================
=================ps aux 或 lax 輸出的解釋=========================
2、ps aux 或 lax 輸出的解釋
au(x) 輸出格式 :?
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 進程所有者
PID: 進程ID
%CPU: 占用的 CPU 使用率
%MEM: 占用的內存使用率
VSZ: 占用的虛擬內存大小
RSS: 占用的內存大小
TTY: 終端的次要裝置號碼 (minor device number of tty)
STAT: 進程狀態(tài):
START: 啟動進程的時間;?
TIME: 進程消耗CPU的時間;
COMMAND:命令的名稱和參數(shù);
=================進程STAT狀態(tài)====================
D 無法中斷的休眠狀態(tài)(通常 IO 的進程);?
R 正在運行,在可中斷隊列中;?
S 處于休眠狀態(tài),靜止狀態(tài);?
T 停止或被追蹤,暫停執(zhí)行;?
W 進入內存交換(從內核2.6開始無效);?
X 死掉的進程;?
Z 僵尸進程不存在但暫時無法消除;
W: 沒有足夠的記憶體分頁可分配
WCHAN 正在等待的進程資源;
<: 高優(yōu)先級進程
N: 低優(yōu)先序進程
L: 有記憶體分頁分配并鎖在記憶體內 (即時系統(tǒng)或捱A I/O),即,有些頁被鎖進內存
s 進程的領導者(在它之下有子進程);?
l 多進程的(使用 CLONE_THREAD, 類似 NPTL pthreads);?
+ 位于后臺的進程組;
================kill 終止進程=========================
kill 終止進程
有十幾種控制進程的方法,下面是一些常用的方法:
kill -STOP [pid]?
發(fā)送SIGSTOP (17,19,23)停止一個進程,而并不消滅這個進程。
kill -CONT [pid]?
發(fā)送SIGCONT (19,18,25)重新開始一個停止的進程。
kill -KILL [pid]?
發(fā)送SIGKILL (9)強迫進程立即停止,并且不實施清理操作。
kill -9 -1?
終止你擁有的全部進程。
SIGKILL 和 SIGSTOP 信號不能被捕捉、封鎖或者忽略,但是,其它的信號可以。所以這是你的終極武器。
=================范例========================
$ ps PID TTY TIME COMMAND 5800 ttyp0 00:00:00 bash 5835 ttyp0 00:00:00 ps
可以看到,顯示地項目共分為四項,依次為PID(進程ID)、TTY(終端名稱)、TIME(進程執(zhí)行時間)、COMMAND(該進程地命令行輸入).
可以運用u選項來查看進程所有者及其他少許詳細信息,如下所示:
$ 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進程前面有條橫線,意味著該進程便是用戶地登錄shell,所以對于一個登錄用戶來說帶短橫線地進程只有一個.還可以看到%CPU、%MEM兩個選項,前者指該進程占用地CPU時間
和總時間地百分比;后者指該進程占用地內存和總內存地百分比.
在這種情況下看到了所有控制終端地進程;當然對于其他那些沒有控制終端地進程還是沒有觀察到,所以這時就需要運用x選項.運用x選項可以觀察到所有地進程情況.
1)ps a 顯示現(xiàn)行終端機下的所有程序,包括其他用戶的程序。
2)ps -A 顯示所有程序。
3)ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數(shù)或常駐服務的標示。
4)ps -e 此參數(shù)的效果和指定"A"參數(shù)相同。
5)ps e 列出程序時,顯示每個程序所使用的環(huán)境變量。
6)ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關系。
7)ps -H 顯示樹狀結構,表示程序間的相互關系。
8)ps -N 顯示所有的程序,除了執(zhí)行ps指令終端機下的程序之外。
9)ps s 采用程序信號的格式顯示程序狀況。
10)ps S 列出程序時,包括已中斷的子程序資料。
11)ps -t<終端機編號> 指定終端機編號,并列出屬于該終端機的程序的狀況。
12)ps u 以用戶為主的格式來顯示程序狀況。
13)ps x 顯示所有程序,不以終端機來區(qū)分。
?
三、虛擬內存的實時監(jiān)控工具vmstat命令是最常見的Linux/Unix監(jiān)控工具,可以展現(xiàn)給定時間間隔的服務器的狀態(tài)值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。這個命令是我查看Linux/Unix最喜愛的命令,一個是Linux/Unix都支持,二是相比top,我可以看到整個機器的CPU,內存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內存使用率(使用場景不一樣)。
一般vmstat工具的使用是通過兩個數(shù)字參數(shù)來完成的,第一個參數(shù)是采樣的時間間隔數(shù),單位是秒,第二個參數(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表示每個兩秒采集一次服務器狀態(tài),1表示只采集一次。
實際上,在應用過程中,我們會在一段時間內一直監(jiān)控,不想監(jiān)控直接結束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ù),一直采集,直到我結束程序,這里采集了5次數(shù)據(jù)我就結束了程序。
好了,命令介紹完畢,現(xiàn)在開始實戰(zhàn)講解每個參數(shù)的意思。
r?表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閑,沒什么程序在跑,當這個值超過了CPU數(shù)目,就會出現(xiàn)CPU瓶頸了。這個也和top的負載有關系,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態(tài)很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。
b?表示阻塞的進程,這個不多說,進程阻塞,大家懂的。
swpd?虛擬內存已使用的大小,如果大于0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那么你該升級內存了或者把耗內存的任務遷移到其他機器。
free?? 空閑的物理內存的大小,我的機器內存總共8G,剩余3415M。
buff?? Linux/Unix系統(tǒng)是用來存儲,目錄里面有什么內容,權限等的緩存,我本機大概占用300多M
cache?cache直接用來記憶我們打開的文件,給文件做緩沖,我本機大概占用300多M(這里是Linux/Unix的聰明之處,把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執(zhí)行的性能,當程序使用內存時,buffer/cached會很快地被使用。)
si??每秒從磁盤讀入虛擬內存的大小,如果這個值大于0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。我的機器內存充裕,一切正常。
so??每秒虛擬內存寫入磁盤的大小,如果這個值大于0,同上。
bi??每秒從塊設備接收的塊數(shù)量,這里的塊設備是指系統(tǒng)上所有的磁盤和其他塊設備,默認塊大小是1024byte,我本機上沒什么IO操作,所以一直是0,但是我曾在處理拷貝大量數(shù)據(jù)(2-3T)的機器上看過可以達到140000/s,磁盤寫入速度差不多140M每秒
bo?每秒向塊設備發(fā)送的塊數(shù)量,例如我們讀取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO過于頻繁,需要調整。
in?每秒CPU的中斷次數(shù),包括時間中斷
cs?每秒上下文切換次數(shù),例如我們調用系統(tǒng)函數(shù),就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數(shù)目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千并發(fā)甚至幾萬并發(fā)的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數(shù)就是比較合適的值了。系統(tǒng)調用也是,每次調用系統(tǒng)函數(shù),我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統(tǒng)函數(shù)。上下文切換次數(shù)過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經(jīng)事的時間少了,CPU沒有充分利用,是不可取的。
us?用戶CPU時間,我曾經(jīng)在一個做加密解密很頻繁的服務器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現(xiàn)不佳)。
sy?系統(tǒng)CPU時間,如果太高,表示系統(tǒng)調用時間長,例如是IO操作頻繁。
id??空閑 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統(tǒng)CPU使用率。
wt?等待IO CPU時間。
?
?
? 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的實時監(jiān)控工具mpstat是Multiprocessor Statistics的縮寫,是實時系統(tǒng)監(jiān)控工具。其報告與CPU的一些統(tǒng)計信息,這些信息存放在/proc/stat文件中。在多CPUs系統(tǒng)里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。mpstat最大的特點是:可以查看多核心cpu中每個計算核心的統(tǒng)計數(shù)據(jù);而類似工具vmstat只能查看系統(tǒng)整體cpu情況。
?
語法
mpstat [-P {|ALL}] [internal [count]] 參數(shù) 解釋 -P {|ALL} 表示監(jiān)控哪個CPU, cpu在[0,cpu個數(shù)-1]中取值 internal 相鄰的兩次采樣的間隔時間、 count 采樣的次數(shù),count只能和delay一起使用 當沒有參數(shù)時,mpstat則顯示系統(tǒng)啟動以后所有信息的平均值。有interval時,第一行的信息自系統(tǒng)啟動以來的平均信息。從第二行開始,輸出為前一個interval時間段的平均信息。?
實例
查看多核CPU核心的當前運行狀況信息, 每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?
如果要看每個cpu核心的詳細當前運行狀況信息,輸出如下:
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時間段里,用戶態(tài)的CPU時間(%),不包含nice值為負進程 (usr/total)*100 %nice 在internal時間段里,nice值為負進程的CPU時間(%) (nice/total)*100 %sys 在internal時間段里,內核時間(%) (system/total)*100 %iowait 在internal時間段里,硬盤IO等待時間(%) (iowait/total)*100 %irq 在internal時間段里,硬中斷時間(%) (irq/total)*100 %soft 在internal時間段里,軟中斷時間(%) (softirq/total)*100 %idle 在internal時間段里,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間(%) (idle/total)*100計算公式如下
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 表示當前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數(shù)點。五、設備IO負載的實時監(jiān)控工具 ?iostat主要用于監(jiān)控系統(tǒng)設備的IO負載情況,iostat首次運行時顯示自系統(tǒng)啟動開始的各項統(tǒng)計信息,之后運行iostat將顯示自上次運行該命令以后的統(tǒng)計信息。用戶可以通過指定統(tǒng)計的次數(shù)和時間來獲得所需的統(tǒng)計信息。它的特點是匯報磁盤活動統(tǒng)計情況,同時也會匯報出CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個進程進行深入分析,僅對系統(tǒng)的整體情況進行分析。iostat屬于sysstat軟件包。可以用yum?install?sysstat?直接安裝。
1.命令格式:
iostat[參數(shù)][時間][次數(shù)]
2.命令功能:
? 通過iostat方便查看CPU、網(wǎng)卡、tty設備、磁盤、CD-ROM?等等設備的活動情況, 負載信息。
3.命令參數(shù):
-C?顯示CPU使用情況
-d?顯示磁盤使用情況
-k?以?KB?為單位顯示
-m?以?M?為單位顯示
-N?顯示磁盤陣列(LVM)?信息
-n?顯示NFS?使用情況
-p[磁盤]?顯示磁盤和分區(qū)的情況
-t?顯示終端和CPU的信息
-x?顯示詳細信息
-V?顯示版本信息
4.使用實例:
iostat -d -k 2參數(shù) -d 表示,顯示設備(磁盤)使用狀態(tài);-k某些使用block為單位的列強制使用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ù)(Indicate the number of transfers per second that were issued to the device.)。"一次傳輸"意思是"一次I/O請求"。多個邏輯請求可能會被合并為"一次I/O請求"。"一次傳輸"請求的大小是未知的。kB_read/s:每秒從設備(drive expressed)讀取的數(shù)據(jù)量; kB_wrtn/s:每秒向設備(drive expressed)寫入的數(shù)據(jù)量; kB_read:讀取的總數(shù)據(jù)量; kB_wrtn:寫入的總數(shù)量數(shù)據(jù)量;這些單位都為Kilobytes。上面的例子中,我們可以看到磁盤sda以及它的各個分區(qū)的統(tǒng)計數(shù)據(jù),當時統(tǒng)計的磁盤總TPS是39.29,下面是各個分區(qū)的TPS。(因為是瞬間值,所以總TPS并不嚴格等于各個分區(qū)TPS的總和)
?
指定監(jiān)控的設備名稱為sda,該命令的輸出結果和上面命令完全相同。
iostat -d sda 2默認監(jiān)控所有的硬盤設備,現(xiàn)在指定只監(jiān)控sda。?
?
-x 參數(shù)
iostat還有一個比較常用的選項-x,該選項將用于顯示和io相關的擴展數(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:每秒這個設備相關的讀取請求有多少被Merge了(當系統(tǒng)調用需要讀取數(shù)據(jù)的時候,VFS將請求發(fā)到各個FS,如果FS發(fā)現(xiàn)不同的讀取請求讀取的是相同Block的數(shù)據(jù),FS會將這個請求合并Merge);wrqm/s:每秒這個設備相關的寫入請求有多少被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 是平均請求隊列的長度。毫無疑問,隊列長度越短越好。 await: 每一個IO請求的處理的平均時間(單位是微秒毫秒)。這里可以理解為IO的響應時間,一般地系統(tǒng)IO響應時間應該低于5ms,如果大于10ms就比較大了。這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大于svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統(tǒng)出了問題。 svctm 表示平均每次設備I/O操作的服務時間(以毫秒為單位)。如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長, 系統(tǒng)上運行的應用程序將變慢。 %util: 在統(tǒng)計時間內所有處理IO時間,除以總共統(tǒng)計時間。例如,如果統(tǒng)計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閑置,那么該設備的%util = 0.8/1 = 80%,所以該參數(shù)暗示了設備的繁忙程度 。一般地,如果該參數(shù)是100%表示設備已經(jīng)接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因為磁盤的并發(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 #查看設備使用率(%util)、響應時間(await) iostat -c 1 10 #查看cpu狀態(tài)?實例分析
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可以看到磁盤的平均響應時間<5ms,磁盤使用率>80。磁盤響應正常,但是已經(jīng)很繁忙了。
六、查看當前系統(tǒng)內存使用狀況(free):
?? ?free命令有以下幾個常用選項:
| 選項 | 說明 |
| -b | 以字節(jié)為單位顯示數(shù)據(jù)。 |
| -k | 以千字節(jié)(KB)為單位顯示數(shù)據(jù)(缺省值)。 |
| -m | 以兆(MB)為單位顯示數(shù)據(jù)。 |
| -s delay | 該選項將使free持續(xù)不斷的刷新,每次刷新之間的間隔為delay指定的秒數(shù),如果含有小數(shù)點,將精確到毫秒,如0.5為500毫秒,1為一秒。 |
??? free命令輸出的表格中包含以下幾列:
| 列名 | 說明 |
| total | 總計物理內存的大小。 |
| used | 已使用的內存數(shù)量。 |
| free | 可用的內存數(shù)量。 |
| Shared | 多個進程共享的內存總額。 |
| 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命令的輸出,我們只需關注紅色高亮的輸出行和綠色高亮的輸出行,見如下具體解釋:
?? ?紅色輸出行:該行使從操作系統(tǒng)的角度來看待輸出數(shù)據(jù)的,used(671776)表示內核(Kernel)+Applications+buffers+cached。free(359544)表示系統(tǒ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ù),同時每隔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
七、報告磁盤空間使用狀況(df):
?? ?該命令最為常用的選項就是-h,該選項將智能的輸出數(shù)據(jù)單位,以便使輸出的結果更具可讀性。
????/> 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):
| 選項 | 說明 |
| -a | 包括了所有的文件,而不只是目錄。 |
| -b | 以字節(jié)為計算單位。 |
| -k | 以千字節(jié)(KB)為計算單位。 |
| -m | 以兆字節(jié)(MB)為計算單位。 |
| -h | 是輸出的信息更易于閱讀。 |
| -s | 只顯示工作目錄所占總空間。 |
| --exclude=PATTERN | 排除掉符合樣式的文件,Pattern就是普通的Shell樣式,?表示任何一個字符,*表示任意多個字符。 |
| --max-depth=N | 從當前目錄算起,目錄深度大于N的子目錄將不被計算,該選項不能和s選項同時存在。? ? |
??? #僅顯示子一級目錄的信息。
????/> du --max-depth=1 -h
?? ?246M??? ./stephen
?? ?246M??? .????
????/> du -sh ./*?? #獲取當前目錄下所有子目錄所占用的磁盤空間大小。
?? ?352K??? ./MemcachedTest
?? ?132K??? ./Test
?? ?33M???? ./thirdparty????
?? ?#在當前目錄下,排除目錄名模式為Te*的子目錄(./Test),輸出其他子目錄占用的磁盤空間大小。
????/> du --exclude=Te* -sh ./* ?
?? ?352K??? ./MemcachedTest
?? ?33M???? ./thirdparty
?
sar
sar [options] [-A] [-o file] t [n]
在命令行中,n 和t 兩個參數(shù)組合起來定義采樣間隔和次數(shù),t為采樣間隔,是必須有
的參數(shù),n為采樣次數(shù),是可選的,默認值是1,-o file表示將命令結果以二進制格式
存放在文件中,file 在此處不是關鍵字,是文件名。options 為命令行選項,sar命令
的選項很多,下面只列出常用選項:
-A:所有報告的總和。
-u:CPU利用率
-v:進程、I節(jié)點、文件和鎖表狀態(tài)。
-d:硬盤使用報告。
-r:內存和交換空間的使用統(tǒng)計。
-g:串口I/O的情況。
-b:緩沖區(qū)使用情況。
-a:文件讀寫情況。
-c:系統(tǒng)調用情況。
-q:報告隊列長度和系統(tǒng)平均負載
-R:進程的活動情況。
-y:終端設備活動情況。
-w:系統(tǒng)交換活動。
-x { pid | SELF | ALL }:報告指定進程ID的統(tǒng)計信息,SELF關鍵字是sar進程本身的統(tǒng)計,ALL關鍵字是所有系統(tǒng)進程的統(tǒng)計。
用sar進行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
?
在顯示內容包括:
%user:CPU處在用戶模式下的時間百分比。
??????? %nice:CPU處在帶NICE值的用戶模式下的時間百分比。
%system:CPU處在系統(tǒng)模式下的時間百分比。
%iowait:CPU等待輸入輸出完成時間的百分比。
??????? %steal:管理程序維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比。
%idle:CPU空閑時間百分比。
??????? 在所有的顯示中,我們應主要注意%iowait和%idle,%iowait的值過高,表示硬盤存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高但系統(tǒng)響應慢時,有可能是CPU等待分配內存,此時應加大內存容量。%idle值如果持續(xù)低于10,那么系統(tǒng)的CPU處理能力相對較低,表明系統(tǒng)中最需要解決的資源是CPU。
?
用sar進行運行進程隊列長度分析:
#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 準備運行的進程運行隊列。
plist-sz? 進程隊列里的進程和線程的數(shù)量
ldavg-1? 前一分鐘的系統(tǒng)平均負載(load average)
ldavg-5? 前五分鐘的系統(tǒng)平均負載(load average)
ldavg-15? 前15分鐘的系統(tǒng)平均負載(load average)
?
順便說一下load avarage的含義
load average可以理解為每秒鐘CPU等待運行的進程個數(shù).
在Linux系統(tǒng)中,sar -q、uptime、w、top等命令都會有系統(tǒng)平均負載load average的輸出,那么什么是系統(tǒng)平均負載呢?
系統(tǒng)平均負載被定義為在特定時間間隔內運行隊列中的平均任務數(shù)。如果一個進程滿足以下條件則其就會位于運行隊列中:
- 它沒有在等待I/O操作的結果
- 它沒有主動進入等待狀態(tài)(也就是沒有調用'wait')
- 沒有被停止(例如:等待終止)
例如:
# uptime
20:55:40 up 24 days,? 3:06,? 1 user,? load average: 8.13, 5.90, 4.94
命令輸出的最后內容表示在過去的1、5、15分鐘內運行隊列中的平均進程數(shù)量。
一般來說只要每個CPU的當前活動進程數(shù)不大于3那么系統(tǒng)的性能就是良好的,如果每個CPU的任務數(shù)大于5,那么就表示這臺機器的性能有嚴重問題。對 于上面的例子來說,假設系統(tǒng)有兩個CPU,那么其每個CPU的當前任務數(shù)為:8.13/2=4.065。這表示該系統(tǒng)的性能是可以接受的。
轉載于:https://my.oschina.net/u/3160044/blog/1927450
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的linux 查看服务器性能常用命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript 私有成员
- 下一篇: linux 其他常用命令