国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Linux服務(wù)器性能評(píng)價(jià)與優(yōu)化(一)
Linux服務(wù)器性能評(píng)估與優(yōu)化(一)
網(wǎng)絡(luò)內(nèi)容總結(jié)(感謝原創(chuàng))
1、前言簡(jiǎn)介
一、影響Linux服務(wù)器性能的因素
1. 操作系統(tǒng)級(jí)
性能調(diào)優(yōu)是找出系統(tǒng)瓶頸并消除這些瓶頸的過程。 很多系統(tǒng)管理員認(rèn)為性能調(diào)優(yōu)僅僅是調(diào)整一下內(nèi)核的參數(shù)即可解決問題, 事實(shí)上情況并不是這樣。 性能調(diào)優(yōu)是實(shí)現(xiàn)操作系統(tǒng)的各個(gè)子系統(tǒng)之間的平衡性,這些子系統(tǒng)包括:
CPU
內(nèi)存
磁盤I/O帶寬
網(wǎng)絡(luò)I/O帶寬
子系統(tǒng)之間相互依存,任何一個(gè)子系統(tǒng)的負(fù)載過度都能導(dǎo)致其他子系統(tǒng)出現(xiàn)問題,例如:
* 大量的 page-in IO 請(qǐng)求可能導(dǎo)致內(nèi)存隊(duì)列被塞滿
* 網(wǎng)卡的巨量吞吐可能導(dǎo)致 CPU 資源耗盡
* 系統(tǒng)嘗試保持釋放內(nèi)存隊(duì)列時(shí)可能耗盡 CPU 資源
* 來自內(nèi)存的大量磁盤寫入請(qǐng)求可能導(dǎo)致 CPU 資源和 IO 通道耗盡
性能調(diào)優(yōu)的前提是找出系統(tǒng)瓶頸之所在, 盡管問題看似由某個(gè)子系統(tǒng)所導(dǎo)致, 然而這很可能是另外一個(gè)子系統(tǒng)的過載所引起的。
2.    程序應(yīng)用級(jí)
為了明白從何處開始著手調(diào)整性能瓶頸, 弄清被分析系統(tǒng)的性能表現(xiàn)是首要任務(wù)。 任何系統(tǒng)的應(yīng)用??煞譃橐韵聝深悾?div style="height:15px;">
1) IO 限制型——一個(gè) IO 限制型的應(yīng)用需要大量的內(nèi)存和基礎(chǔ)存儲(chǔ)設(shè)備占用。 因其需要大量的數(shù)據(jù)讀寫請(qǐng)求,此類應(yīng)用對(duì) CPU 和網(wǎng)絡(luò)需求不高(除非存儲(chǔ)系統(tǒng)在網(wǎng)絡(luò)上) 。
IO 限制型應(yīng)用使用 CPU 資源來進(jìn)行 IO 操作且常進(jìn)入睡眠狀態(tài)。 數(shù)據(jù)庫(kù)應(yīng)用常被認(rèn)為屬于此類。
2)CPU 限制型——一個(gè) CPU 限制型應(yīng)用需要大量的 CPU 資源,來進(jìn)行批量的處理或大量的計(jì)算。大容量 web 服務(wù),mail 服務(wù),以及任何類型的渲染服務(wù)都被歸到此類。
二、系統(tǒng)性能評(píng)估標(biāo)準(zhǔn)
判斷一個(gè)系統(tǒng)是否有性能問題的唯一途徑是弄清楚對(duì)系統(tǒng)的期望是神馬, 需求的性能是神馬, 應(yīng)該得到的數(shù)據(jù)是神馬?而為了建立這些信息的唯一途徑是為系統(tǒng)建立一個(gè)基準(zhǔn)。 在性能可接受的狀態(tài)下必須為系統(tǒng)建立統(tǒng)計(jì)信息,這樣就可以在性能不可接受時(shí)進(jìn)行對(duì)比。
影響性能因素
評(píng)判標(biāo)準(zhǔn)
糟糕
CPU
user% + sys%< 70%
user% + sys%= 85%
user% + sys% >=90%
內(nèi)存
Swap In(si)=0
Swap Out(so)=0
Per CPU with 10 page/s
More Swap In & Swap Out
磁盤
iowait % < 20%
iowait % =35%
iowait % >= 50%
其中:
%user:表示CPU處在用戶模式下的時(shí)間百分比。
%sys:表示CPU處在系統(tǒng)模式下的時(shí)間百分比。
%iowait:表示CPU等待輸入輸出完成時(shí)間的百分比。
swap in:即si,表示虛擬內(nèi)存的頁(yè)導(dǎo)入,即從SWAP DISK交換到RAM
swap out:即so,表示虛擬內(nèi)存的頁(yè)導(dǎo)出,即從RAM交換到SWAP DISK。
三、系統(tǒng)性能分析工具
1.常用系統(tǒng)命令
Vmstat、sar、iostat、netstat、free、ps、top等
2.常用組合方式
·           用vmstat、sar、iostat檢測(cè)是否是CPU瓶頸
·           用free、vmstat檢測(cè)是否是內(nèi)存瓶頸
·           用iostat檢測(cè)是否是磁盤I/O瓶頸
·           用netstat檢測(cè)是否是網(wǎng)絡(luò)帶寬瓶頸
Linux性能評(píng)估與優(yōu)化:
cpu,內(nèi)存,IO, 網(wǎng)絡(luò)
2、負(fù)載:整體性能評(píng)估
系統(tǒng)整體性能評(píng)估(uptime命令/top)
[root@web1 ~]# uptime
16:38:00 up 118 days,  3:01,  5 users,  load average: 1.22, 1.02, 0.91
這里需要注意的是:load average這個(gè)輸出值,這三個(gè)值的大小一般不能大于系統(tǒng)CPU的個(gè)數(shù),例如,本輸出中系統(tǒng)有8個(gè)CPU,如果load average的三個(gè)值長(zhǎng)期大于8時(shí),說明CPU很繁忙,負(fù)載很高,可能會(huì)影響系統(tǒng)性能,但是偶爾大于8時(shí),倒不用擔(dān)心,一般不會(huì)影響系統(tǒng)性能。相反,如果load average的輸出值小于CPU的個(gè)數(shù),則表示CPU還有空閑的時(shí)間片,比如本例中的輸出,CPU是非??臻e的。
Load:top
系統(tǒng)負(fù)載指運(yùn)行隊(duì)列的平均長(zhǎng)度,也就是等待CPU的平均進(jìn)程數(shù)。Load越高說明系統(tǒng)響應(yīng)越慢,如果load是0,代表進(jìn)程不需要等待,立刻就能獲得cpu運(yùn)行。可以通過查詢文件/proc/loadavg獲取系統(tǒng)在前一分鐘、前五分鐘和前十五分鐘的平均負(fù)載以及當(dāng)前運(yùn)行的進(jìn)程、系統(tǒng)的進(jìn)程數(shù)和上一次調(diào)度運(yùn)行的進(jìn)程。
justin@junjun:/proc$ cat/proc/loadavg
0.71 0.70 0.63 1/403 5111
在linux系統(tǒng)中,也可直接通過命令行 “w”或者“uptime”查看,如下:
16:10:22 up 1 day, 4:18,  3 users,  load average: 0.34, 0.50, 0.52
USER     TTY      FROM              LOGIN@  IDLE   JCPU   PCPU WHAT
justin   tty7     :0               Tue11   28:19m 10:15   0.22s gnome-session
justin   pts/0    :0.0             Tue11   28:17m 2:22   0.00s /bin/bash./jettyctl.sh
justin   pts/1    :0.0             16:08    0.00s 0.17s  0.00s w
cpu usage:
系統(tǒng)的CPU使用率。
可以用“top”命令動(dòng)態(tài)的顯示當(dāng)前系統(tǒng)進(jìn)程用戶的使用情況。
前五行是系統(tǒng)整體的統(tǒng)計(jì)信息。
第一行是任務(wù)隊(duì)列信息,同 uptime 命令的執(zhí)行結(jié)果。其內(nèi)容如下:當(dāng)前時(shí)間;系統(tǒng)運(yùn)行時(shí)間,格式為時(shí):分;當(dāng)前登錄用戶數(shù);系統(tǒng)負(fù)載,即任務(wù)隊(duì)列的平均長(zhǎng)度。
第二、三行為進(jìn)程和CPU的信息。當(dāng)有多個(gè)CPU時(shí),這些內(nèi)容可能會(huì)超過兩行。
內(nèi)容如下:Tasks: 175 total進(jìn)程總數(shù);1 running正在運(yùn)行的進(jìn)程數(shù);174 sleeping睡眠的進(jìn)程數(shù);0 stopped停止的進(jìn)程數(shù);0 zombie僵尸進(jìn)程數(shù)
Cpu(s):22.0% us用戶空間占用CPU百分比
20.7%sy內(nèi)核空間占用CPU百分比
1.1%ni用戶進(jìn)程空間內(nèi)改變過優(yōu)先級(jí)的進(jìn)程占用CPU百分比
52.7%id空閑CPU百分比
3.3%wa等待輸入輸出的CPU時(shí)間百分比
0.0%hi
0.2%si swap in,表示虛擬內(nèi)存的頁(yè)導(dǎo)入,即從SWAPDISK交換到RAM
0.0%st swap out,表示虛擬內(nèi)存的頁(yè)導(dǎo)出,即從RAM交換到SWAPDISK。
PR:操作系統(tǒng)給進(jìn)程的安排的優(yōu)先級(jí)。這個(gè)值標(biāo)示進(jìn)程調(diào)度器分配給進(jìn)程的時(shí)間片長(zhǎng)度。單位是時(shí)鐘個(gè)數(shù)。如果一個(gè)Linux系統(tǒng)的時(shí)間片是10ms,那么PID是2718的進(jìn)程在執(zhí)行了200ms后,才會(huì)進(jìn)行進(jìn)程切換。
RES:進(jìn)程占用的物理內(nèi)存大小
VIRT:物理內(nèi)存+虛擬內(nèi)存。
吞吐率:
服務(wù)器單位時(shí)間內(nèi)處理的請(qǐng)求數(shù),一般用來描述并發(fā)能力,當(dāng)然談吞吐率的前提是并發(fā)用戶數(shù)。不同的并發(fā)用戶數(shù)下,吞吐率自然大不相同。單位是“請(qǐng)求數(shù)/秒”。吞吐量分為網(wǎng)絡(luò)吞吐量和事務(wù)吞吐量,當(dāng)作為事務(wù)吞吐量時(shí),采用TPS來衡量。目前線上環(huán)境Apache沒有mod_status模塊,不能很方便的查詢。
TPS:
服務(wù)器每秒處理的事務(wù)數(shù)。PV在性能測(cè)試中的表現(xiàn)形式是以TPS來體現(xiàn)的,兩者有一個(gè)轉(zhuǎn)換公式,如下:
TPS平均值 =((PV*80%)/(24*60*60*40%))/服務(wù)器數(shù)量 =  pv/s
TPS峰值 =(((PV*80%)/(24*60*60*40%))*1.6) /服務(wù)器數(shù)量=  pv/s ,這個(gè)和我們經(jīng)常說的“2-8原則”貼近。
一般的,評(píng)價(jià)系統(tǒng)性能均以每秒鐘完成的技術(shù)交易的數(shù)量來衡量。系統(tǒng)整體處理能力取決于處理能力最低模塊的TPS 。應(yīng)用系統(tǒng)的處理能力一般要求在10-100左右。
3、CPU性能評(píng)估
一、CPU介紹
CPU 利用率很大部分取決于試圖訪問它的資源, 內(nèi)核擁有一個(gè)管理兩種資源的調(diào)度器:線程(單或多)和中斷。調(diào)度器給予不同資源以不同的優(yōu)先級(jí),以下由優(yōu)先級(jí)從高到低:
1) 中斷——設(shè)備通知內(nèi)核它們處理完成。例如網(wǎng)卡發(fā)送一個(gè)數(shù)據(jù)包或硬盤驅(qū)動(dòng)器提供一次 IO 請(qǐng)求
2) 內(nèi)核(系統(tǒng))進(jìn)程——所有的內(nèi)核進(jìn)程都在此級(jí)別的優(yōu)先級(jí)進(jìn)行處理
3)用戶進(jìn)程——通常被稱為“用戶空間” ,所有應(yīng)用軟件運(yùn)行在用戶空間,擁有最低的優(yōu)先級(jí)
為了弄明白內(nèi)核是如何管理不同的資源的,幾個(gè)關(guān)鍵概念需要提及一下: context  switches,run queues,utilization。
Context Switches(上下文切換):
大多數(shù)處理器在同一時(shí)間只能處理一個(gè)進(jìn)程或線程,多線程處理器可同時(shí)處理 n 個(gè)線程。然而,linux 內(nèi)核把多核處理器的各個(gè)核心當(dāng)做獨(dú)立核心。例如,內(nèi)核把一個(gè)雙核的處理當(dāng)做兩個(gè)獨(dú)立處理器。
一個(gè)標(biāo)準(zhǔn)的內(nèi)核可同時(shí)處理 50 到 50000 個(gè)進(jìn)程, 在只有一顆 CPU 的情況下, 內(nèi)核必須調(diào)度和平衡這些進(jìn)程和線程。 每個(gè)線程在處理器上都擁有一個(gè)時(shí)間分配單元, 當(dāng)一個(gè)線程超過自己的時(shí)間單元或被更高優(yōu)先級(jí)的程序搶占時(shí), 此線程及被傳回隊(duì)列而此時(shí)更高優(yōu)先級(jí)的程序?qū)⒃谔幚砥魃蠄?zhí)行。這種線程間的切換操作即是上下文切換。
運(yùn)行隊(duì)列
每個(gè) CPU 維持著一個(gè)線程的運(yùn)行隊(duì)列, 理論上, 調(diào)度器應(yīng)該是不斷地運(yùn)行和執(zhí)行線程。線程要么處于睡眠狀態(tài),要么處于可運(yùn)行狀態(tài)。假如 CPU 子系統(tǒng)處于高負(fù)載狀態(tài),那么內(nèi)核調(diào)度器罷工是有可能的, 其結(jié)果將導(dǎo)致可運(yùn)行狀態(tài)的進(jìn)程開始阻塞運(yùn)行隊(duì)列。 運(yùn)行隊(duì)列越大,執(zhí)行進(jìn)程所花費(fèi)的時(shí)間也越長(zhǎng)。
一個(gè)很流行的術(shù)語(yǔ)叫“l(fā)oad(負(fù)載) ”經(jīng)常被用來描述運(yùn)行隊(duì)列的狀態(tài),系統(tǒng)負(fù)載是由正在執(zhí)行的進(jìn)程和 CPU 運(yùn)行隊(duì)列中的進(jìn)程的結(jié)合,如果有 2 個(gè)線程正在一個(gè)雙核系統(tǒng)中執(zhí)行且4 個(gè)正在運(yùn)行隊(duì)列中, 那么負(fù)載數(shù)即是 6, 像 top 等工具可查看過去 1,5,15 分鐘的負(fù)載均值。
CPU 利用率
CPU 利用率被定義為 CPU 使用的百分比, CPU 如何被利用是衡量一個(gè)系統(tǒng)的重要標(biāo)準(zhǔn)。多數(shù)性能監(jiān)測(cè)工具把 CPU 利用分為以下幾個(gè)類型:
* 用戶時(shí)間——CPU 花在執(zhí)行用戶空間進(jìn)程的時(shí)間百分比
* 系統(tǒng)時(shí)間——CPU 花在執(zhí)行內(nèi)核進(jìn)程和中斷的時(shí)間百分比
* IO 等待——CPU 花在等待 IO 請(qǐng)求完成的時(shí)間百分比
* IDLE——CPU 的空閑時(shí)間百分比
理解 CPU 的性能狀態(tài)即是理解中斷,運(yùn)行隊(duì)列和上下文切換的狀態(tài)。之前有提到過性能與基準(zhǔn)信息有密切關(guān)系,但是有些常規(guī)的性能預(yù)期:
* 運(yùn)行隊(duì)列——每個(gè)處理器上的運(yùn)行隊(duì)列不應(yīng)該有超過 1-3 個(gè)排隊(duì)的線程。 例如, 一個(gè)雙核系統(tǒng)不應(yīng)該有超過 6 個(gè)進(jìn)行在運(yùn)行隊(duì)列里。
* CPU 利用率——假如一個(gè) CPU 滿狀態(tài)負(fù)荷,那么以下的平衡關(guān)系需要達(dá)到:
65%--70%的用戶時(shí)間
30%--35%的系統(tǒng)時(shí)間
0%--5%的空閑時(shí)間
* 上下文切換——上下文切換的數(shù)量與 CPU 的利用率有直接關(guān)系。如果 CPU 處于高負(fù)荷狀態(tài)下那么大量的上下文切換是正常的。
二、利用vmstat命令監(jiān)控系統(tǒng)CPU
vmstat 工具的低開銷使得它可以在一個(gè)高負(fù)載的系統(tǒng)上持續(xù)運(yùn)行,它有兩種工作模式:均值模式和采樣模式。采樣模式如下:
該命令可以顯示關(guān)于系統(tǒng)各種資源之間相關(guān)性能的簡(jiǎn)要信息,這里我們主要用它來看CPU一個(gè)負(fù)載情況。
下面是vmstat命令在某個(gè)系統(tǒng)的輸出結(jié)果:
[root@node1 ~]# vmstat 2 3
procs -----------memory----------  ---swap--  -----io---- --system--  -----cpu------
r  b   swpd   free      buff  cache   si   so    bi    bo       in     cs     us sy  id   wa st
0  0    0    162240   8304  67032   0    0    13    21   1007   23     0  1   98   0   0
0  0    0    162240   8304  67032   0    0     1     0     1010   20     0  1   100 0   0
0  0    0    162240   8304  67032   0    0     1     1     1009   18     0  1    99  0   0
Procs
r:運(yùn)行和等待cpu時(shí)間片的進(jìn)程數(shù),這個(gè)值如果長(zhǎng)期大于系統(tǒng)CPU的個(gè)數(shù),說明CPU不足,需要增加CPU。
b:在等待資源的進(jìn)程數(shù),比如正在等待I/O、或者內(nèi)存交換等。
Memory
swpd: 虛擬內(nèi)存使用情況,單位:KB
free: 空閑的內(nèi)存,單位KB
buff: 被用來做為緩存的內(nèi)存數(shù),一般對(duì)塊設(shè)備的讀寫才需要緩沖,單位:KB
cache:表示page cached的內(nèi)存數(shù)量,一般作為文件系統(tǒng)cached,頻繁訪問的文件都會(huì)被cached,如果cache值較大,說明cached的文件數(shù)較多,如果此時(shí)IO中bi比較小,說明文件系統(tǒng)效率比較好。
Swap
si: 從磁盤交換到內(nèi)存的交換頁(yè)數(shù)量,單位:KB/秒
so: 從內(nèi)存交換到磁盤的交換頁(yè)數(shù)量,單位:KB/秒
I/O
bi: 發(fā)送到塊設(shè)備的塊數(shù),單位:塊/秒
bo: 從塊設(shè)備接收到的塊數(shù),單位:塊/秒
System
in: 每秒的中斷數(shù),包括時(shí)鐘中斷。
cs: 每秒的環(huán)境(上下文)切換次數(shù)
cpu
us:用戶進(jìn)程消耗的CPU 時(shí)間百分比。us的值比較高時(shí),說明用戶進(jìn)程消耗的cpu時(shí)間多,但是如果長(zhǎng)期大于50%,就需要考慮優(yōu)化程序或算法。
sy:內(nèi)核進(jìn)程消耗的CPU時(shí)間百分比。Sy的值較高時(shí),說明內(nèi)核消耗的CPU資源很多。
根據(jù)經(jīng)驗(yàn),us+sy的參考值為70%,如果us+sy大于 70%說明可能存在CPU資源不足。
注意:
1)如果 r (run queue 運(yùn)行隊(duì)列中的進(jìn)程數(shù))經(jīng)常大于 4 ,且id經(jīng)常少于40,表示cpu的負(fù)荷很重。
2)如果si,so 長(zhǎng)期不等于0,表示內(nèi)存不足。
3)如果disk 經(jīng)常不等于0, 且在 b中的隊(duì)列大于3, 表示 io性能不好。
4)其擁有很高的中斷數(shù) (in) 和很低的上下文切換數(shù), 這說明可能有單個(gè)進(jìn)程在進(jìn)行大量的硬件資源請(qǐng)求。
5)運(yùn)行隊(duì)列數(shù)剛好達(dá)到可接受的上限值,且出現(xiàn)超過上限值的情況。
三、mpstat命令監(jiān)控系統(tǒng)CPU
如果你的系統(tǒng)有多個(gè)處理器核心,你就可以使用 mpstat 工具來監(jiān)測(cè)每個(gè)核心。linux 內(nèi)核把一個(gè)雙核處理器當(dāng)做 2 個(gè) CPU,所以一個(gè)擁有 2 顆雙核心的系統(tǒng)將被視為 4CPU。
# mpstat –P ALL 1
10:48:59 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
10:48:59 PM  all    0.32    0.00    0.22    0.07    0.01    0.01    0.00    0.00   99.37
四、利用sar命令監(jiān)控系統(tǒng)CPU
sar功能很強(qiáng)大,可以對(duì)系統(tǒng)的每個(gè)方面進(jìn)行單獨(dú)的統(tǒng)計(jì),但是使用sar命令會(huì)增加系統(tǒng)開銷,不過這些開銷是可以評(píng)估的,對(duì)系統(tǒng)的統(tǒng)計(jì)結(jié)果不會(huì)有很大影響。
下面是sar命令對(duì)某個(gè)系統(tǒng)的CPU統(tǒng)計(jì)輸出:
[root@webserver ~]# sar -u 3 5
Linux 2.6.9-42.ELsmp (webserver)        11/28/2008      _i686_  (8 CPU)
11:41:24 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:41:27 AM     all      0.88      0.00      0.29      0.00      0.00     98.83
11:41:30 AM     all      0.13      0.00      0.17      0.21      0.00     99.50
11:41:33 AM     all      0.04      0.00      0.04      0.00      0.00     99.92
11:41:36 AM     all      90.08     0.00      0.13      0.16      0.00     9.63
11:41:39 AM     all      0.38      0.00      0.17      0.04      0.00     99.41
Average:        all      0.34      0.00      0.16      0.05      0.00     99.45
對(duì)上面每項(xiàng)的輸出解釋如下:
l        %user列顯示了用戶進(jìn)程消耗的CPU 時(shí)間百分比。
l        %nice列顯示了運(yùn)行正常進(jìn)程所消耗的CPU 時(shí)間百分比。
l        %system列顯示了系統(tǒng)進(jìn)程消耗的CPU時(shí)間百分比。
l        %iowait列顯示了IO等待所占用的CPU時(shí)間百分比
l        %steal列顯示了在內(nèi)存相對(duì)緊張的環(huán)境下pagein強(qiáng)制對(duì)不同的頁(yè)面進(jìn)行的steal操作 。
l        %idle列顯示了CPU處在空閑狀態(tài)的時(shí)間百分比。
具體參考:LinuxCPU利用率計(jì)算原理及內(nèi)核實(shí)現(xiàn)(http://ilinuxkernel.com/?p=333)
問題
1.你是否遇到過系統(tǒng)CPU整體利用率不高,而應(yīng)用緩慢的現(xiàn)象?
在一個(gè)多CPU的系統(tǒng)中,如果程序使用了單線程,會(huì)出現(xiàn)這么一個(gè)現(xiàn)象,CPU的整體使用率不高,但是系統(tǒng)應(yīng)用卻響應(yīng)緩慢,這可能是由于程序使用單線程的原因,單線程只使用一個(gè)CPU,導(dǎo)致這個(gè)CPU占用率為100%,無法處理其它請(qǐng)求,而其它的CPU卻閑置,這就導(dǎo)致了整體CPU使用率不高,而應(yīng)用緩慢現(xiàn)象的發(fā)生。
五、小結(jié)
CPU 的性能監(jiān)測(cè)包含以下部分:
* 1)檢查系統(tǒng)運(yùn)行隊(duì)列并確保每個(gè)核心上不超過 3 個(gè)可運(yùn)行進(jìn)程
* 2)確保 CPU 利用率的用戶時(shí)間和系統(tǒng)時(shí)間在 70/30 之間
* 3)當(dāng) CPU 花費(fèi)更多的時(shí)間在 system mode 上時(shí),更有可能是因過載而試圖重新調(diào)度優(yōu)先級(jí)
* 4)運(yùn)行 CPU 限制型應(yīng)用比 IO 限制型應(yīng)用更易出現(xiàn)性能瓶頸
4、內(nèi)存性能評(píng)估
一、虛擬內(nèi)存簡(jiǎn)介
虛擬內(nèi)存是使用磁盤作為 RAM 的擴(kuò)充使得可用內(nèi)存的有效大小得到相應(yīng)增加。 內(nèi)核會(huì)將當(dāng)前內(nèi)存中未被使用的塊的內(nèi)容寫入硬盤以此來騰出內(nèi)存空間。 當(dāng)上面的內(nèi)容再次需要被用到時(shí),它們將被重新讀入內(nèi)存。這些對(duì)用戶完全透明;在 linux 下運(yùn)行的程序只會(huì)看到有大量?jī)?nèi)存空間可用而不會(huì)去管它們的一部分時(shí)不時(shí)的從硬盤讀取。 當(dāng)然, 硬盤的讀寫操作速度比內(nèi)存慢上千倍, 所以這個(gè)程序的運(yùn)行速度也不會(huì)很快。 這個(gè)被用作虛擬內(nèi)存的硬盤空間
唄稱作交換空間(swap space) 。
1)虛擬內(nèi)存頁(yè)
虛擬內(nèi)存被分成頁(yè),在 X86 架構(gòu)下的每個(gè)虛擬內(nèi)存頁(yè)大小為 4KB,
當(dāng)內(nèi)核由內(nèi)存向磁盤讀寫數(shù)據(jù)時(shí),是以頁(yè)為單位。內(nèi)核會(huì)把內(nèi)存頁(yè)寫入 swap 空間和文件系統(tǒng)。
盤讀寫數(shù)據(jù)時(shí),是以頁(yè)為單位。內(nèi)核會(huì)把內(nèi)存頁(yè)寫入 swap 空間和文件系統(tǒng)。
2)內(nèi)核內(nèi)存分頁(yè)
內(nèi)存分頁(yè)是一個(gè)常見的動(dòng)作, 不能和內(nèi)存交換相混淆。 內(nèi)存分頁(yè)是在正常間隔下同步內(nèi)存中信息至磁盤的過程。 隨著時(shí)間的增長(zhǎng), 應(yīng)用會(huì)不斷耗盡內(nèi)存, 有時(shí)候內(nèi)核必須掃描內(nèi)存并回收被分配給其他應(yīng)用的空閑頁(yè)面。
3)頁(yè)幀回收算法(PFRA)
PFRA 負(fù)責(zé)回收內(nèi)存。PFRA 根據(jù)頁(yè)類型來判斷是否被回收,內(nèi)存頁(yè)有以下類型:
* 不可被回收——locked,kernel,reserved 被鎖、內(nèi)核、保留頁(yè)
* 可交換——無名內(nèi)存頁(yè)
* 可同步——被磁盤同步的頁(yè)面
* 可丟棄——靜態(tài)頁(yè),廢棄頁(yè)
除了不可被回收類型外其他均可被 PFRA 回收。PFRA 具有兩個(gè)主要功能,一個(gè)是 kswapd內(nèi)核進(jìn)程,一個(gè)是“Low On Memory Reclaiming”功能。
4)kswapd
kswapd 守護(hù)進(jìn)程負(fù)責(zé)確保內(nèi)存保持可用空閑空間。它監(jiān)測(cè)內(nèi)核中的 pages_high 和pages_low 標(biāo)記,如果空閑內(nèi)存空間值小于 pages_low 值,kswwapd 進(jìn)程開始掃描并嘗試每次回收 32 個(gè)頁(yè)面,如此重復(fù)直至空閑內(nèi)存空間大于 pages_high 值。
kswapd 進(jìn)程履行以下操作:
* 假如頁(yè)面未改變,它將該頁(yè)面放入 free list。
* 假如頁(yè)面發(fā)生改變且被文件系統(tǒng)回寫,它將頁(yè)面內(nèi)容寫入磁盤。
* 假如頁(yè)面發(fā)生改變且未被文件系統(tǒng)回寫(無名頁(yè)) ,它將頁(yè)面內(nèi)容寫入 swap 設(shè)備。
5)pdflush 內(nèi)核分頁(yè)
pdflush 守護(hù)進(jìn)程負(fù)責(zé)同步所有與文件系統(tǒng)相關(guān)的頁(yè)面至磁盤,換句話說,就是當(dāng)一個(gè)文件在內(nèi)存中發(fā)生改變,pdflush 守護(hù)進(jìn)程就將其回寫進(jìn)磁盤。
當(dāng)內(nèi)存中的臟頁(yè)面數(shù)量超過 10% 時(shí) pdflush 守護(hù)進(jìn)程開始回寫,這個(gè)動(dòng)作與內(nèi)核的vm.dirty_background_ratio 參數(shù)值有關(guān)。
# sysctl -n vm.dirty_background_ratio10
多數(shù)情況下 pdflush 守護(hù)進(jìn)程與 PFRA 之間是相互獨(dú)立的。除了常規(guī)的回收動(dòng)作之外,當(dāng)內(nèi)核調(diào)用 LMR 算法時(shí),LMR 將強(qiáng)制 pdflush 進(jìn)行臟頁(yè)面回收。
二、利用free指令監(jiān)控內(nèi)存
free是監(jiān)控linux內(nèi)存使用狀況最常用的指令,看下面的一個(gè)輸出:
[root@webserver ~]# free  -m
total         used       free     shared    buffers     cached
Mem:       8111       7185        926          0       243           6299
-/+ buffers/cache:     643       7468
Swap:       8189          0         8189
一般有這樣一個(gè)經(jīng)驗(yàn)公式:應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存>70%時(shí),表示系統(tǒng)內(nèi)存資源非常充足,不影響系統(tǒng)性能,應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<20%時(shí),表示系統(tǒng)內(nèi)存資源緊缺,需要增加系統(tǒng)內(nèi)存,20%<應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存<70%時(shí),表示系統(tǒng)內(nèi)存資源基本能滿足應(yīng)用需求,暫時(shí)不影響系統(tǒng)性能。
三、利用vmstat命令監(jiān)控內(nèi)存
vmstat 命令除了報(bào)告 CPU 的情況外還能查看虛擬內(nèi)存的使用情況,vmstat 輸出的以下區(qū)域與虛擬內(nèi)存有關(guān)
[root@node1 ~]# vmstat 2 3
procs -----------memory----------  ---swap--  -----io---- --system--  -----cpu------
r  b   swpd   free      buff  cache   si   so    bi    bo       in     cs     us sy  id  wa st
0  0    0    162240   8304  67032   0    0    13    21   1007   23     0  1  98   0  0
0  0    0    162240   8304  67032   0    0     1     0     1010   20     0  1  100 0  0
0  0    0    162240   8304  67032   0    0     1     1     1009   18     0  1  99   0  0
memory
swpd列表示切換到內(nèi)存交換區(qū)的內(nèi)存數(shù)量(以k為單位)。如果swpd的值不為0,或者比較大,只要si、so的值長(zhǎng)期為0,這種情況下一般不用擔(dān)心,不會(huì)影響系統(tǒng)性能。
free列表示當(dāng)前空閑的物理內(nèi)存數(shù)量(以k為單位)
buff列表示buffers cache的內(nèi)存數(shù)量,一般對(duì)塊設(shè)備的讀寫才需要緩沖。
cache列表示page cached的內(nèi)存數(shù)量,一般作為文件系統(tǒng)cached,頻繁訪問的文件都會(huì)被cached,如果cache值較大,說明cached的文件數(shù)較多,如果此時(shí)IO中bi比較小,說明文件系統(tǒng)效率比較好。
swap
si列表示由磁盤調(diào)入內(nèi)存,也就是內(nèi)存進(jìn)入內(nèi)存交換區(qū)的數(shù)量。
so列表示由內(nèi)存調(diào)入磁盤,也就是內(nèi)存交換區(qū)進(jìn)入內(nèi)存的數(shù)量。
一般情況下,si、so的值都為0,如果si、so的值長(zhǎng)期不為0,則表示系統(tǒng)內(nèi)存不足。需要增加系統(tǒng)內(nèi)存。
例如大規(guī)模IO寫入:
vmstat  3
procs memory swap io system cpu
r  b swpd    free          buff       cache  si   so bi     bo    in    cs  us sy id wa
3 2 809192 261556 79760 886880 416 0 8244 751 426 863 17 3 6 75
0 3 809188 194916 79820 952900 307 0 21745 1005 1189 2590 34 6 12 48
0 3 809188 162212 79840 988920 95 0 12107 0 1801 2633 2 2 3 94
1 3 809268 88756 79924 1061424 260 28 18377 113 1142 1694 3 5 3 88
1 2 826284 17608 71240 1144180 100 6140 25839 16380 1528 1179 19 9 12 61
2 1 854780 17688 34140 1208980 1 9535 25557 30967 1764 2238 43 13 16 28
0 8 867528 17588 32332 1226392 31 4384 16524 27808 1490 1634 41 10 7 43
4 2 877372 17596 32372 1227532 213 3281 10912 3337 678 932 33 7 3 57
1 2 885980 17800 32408 1239160 204 2892 12347 12681 1033 982 40 12 2 46
5 2 900472 17980 32440 1253884 24 4851 17521 4856 934 1730 48 12 13 26
1 1 904404 17620 32492 1258928 15 1316 7647 15804 919 978 49 9 17 25
4 1 911192 17944 32540 1266724 37 2263 12907 3547 834 1421 47 14 20 20
1 1 919292 17876 31824 1275832 1 2745 16327 2747 617 1421 52 11 23 14
5 0 925216 17812 25008 1289320 12 1975 12760 3181 772 1254 50 10 21 19
0 5 932860 17736 21760 1300280 8 2556 15469 3873 825 1258 49 13 24 15
通過以上數(shù)據(jù)可得出以下結(jié)果:
* 大量的數(shù)據(jù)從磁盤讀入內(nèi)存(bi) ,因 cache 值在不斷增長(zhǎng)
* 盡管數(shù)據(jù)正不斷消耗內(nèi)存,空閑空間仍保持在 17M 左右
* buff 值正不斷減少,說明 kswapd 正不斷回收內(nèi)存
* swpd 值不斷增大,說明 kswapd 正將臟頁(yè)面內(nèi)容寫入交換空間(so)
四、小結(jié):
虛擬內(nèi)存的性能監(jiān)測(cè)包括以下步驟:
* 當(dāng)系統(tǒng)利用內(nèi)存緩存超過磁盤緩存,系統(tǒng)反應(yīng)速度更快
* 除在有大量持續(xù)的交換空間和磁盤讀入動(dòng)作情況下外, 空閑內(nèi)存空間很少說明 cache得到了有效的利用
* 如果系統(tǒng)報(bào)告有持續(xù)的交換空間使用,說明內(nèi)存不足
5、磁盤i/o性能評(píng)估
l             熟悉RAID存儲(chǔ)方式,可以根據(jù)應(yīng)用的不同,選擇不同的RAID方式。
l             盡可能用內(nèi)存的讀寫代替直接磁盤I/O,使頻繁訪問的文件或數(shù)據(jù)放入內(nèi)存中進(jìn)行操作處理,因?yàn)閮?nèi)存讀寫操作比直接磁盤讀寫的效率要高千倍。
l             將經(jīng)常進(jìn)行讀寫的文件與長(zhǎng)期不變的文件獨(dú)立出來,分別放置到不同的磁盤設(shè)備上。
l              對(duì)于寫操作頻繁的數(shù)據(jù),可以考慮使用裸設(shè)備代替文件系統(tǒng)。
使用裸設(shè)備的優(yōu)點(diǎn)有:
ü           數(shù)據(jù)可以直接讀寫,不需要經(jīng)過操作系統(tǒng)級(jí)的緩存,節(jié)省了內(nèi)存資源,避免了內(nèi)存資源爭(zhēng)用。
ü           避免了文件系統(tǒng)級(jí)的維護(hù)開銷,比如文件系統(tǒng)需要維護(hù)超級(jí)塊、I-node等。
ü           避免了操作系統(tǒng)的cache預(yù)讀功能,減少了I/O請(qǐng)求。
使用裸設(shè)備的缺點(diǎn)是:
ü            數(shù)據(jù)管理、空間管理不靈活,需要很專業(yè)的人來操作。
一、磁盤存儲(chǔ)基礎(chǔ)
磁盤 IO 子系統(tǒng)是 linux 系統(tǒng)里最慢的部分,這是由于其與 CPU 相比相去甚遠(yuǎn),且依賴于物理式工作(轉(zhuǎn)動(dòng)和檢索) 。如果將讀取磁盤和讀取內(nèi)存所花費(fèi)的時(shí)間轉(zhuǎn)換為分秒,那么他們之間的差距是 7 天和 7 分鐘,所以 linux 內(nèi)核盡量少的進(jìn)行磁盤操作是至關(guān)重要的。以下部分將描述下內(nèi)核處理數(shù)據(jù)從磁盤到內(nèi)存和從內(nèi)存到磁盤的不同方式。
1)數(shù)據(jù)讀寫——內(nèi)存頁(yè)面
linux 內(nèi)核將磁盤 IO 分為頁(yè)面進(jìn)行操作, 大多數(shù) linux 系統(tǒng)中默認(rèn)頁(yè)面大小為 4K, 即以4K 為單位進(jìn)行磁盤和內(nèi)存間的讀寫操作。我們可以使用 time 命令來查找頁(yè)面大?。?div style="height:15px;">
# /usr/bin/time -v date
......
Page size (bytes): 4096
2)主要頁(yè)錯(cuò)誤(Major Page Faults)和次要頁(yè)錯(cuò)誤(Minor PageFaults)
linux 和大多數(shù) UNIX 系統(tǒng)一樣,使用虛擬內(nèi)存層來映射物理地址空間,這種映射在某種意義上是說當(dāng)一個(gè)進(jìn)程開始運(yùn)行,內(nèi)核僅僅映射其需要的那部分,內(nèi)核首先會(huì)搜索 CPU緩存和物理內(nèi)存,如果沒有找到內(nèi)核則開始一次 MPF, 一次 MPF 即是一次對(duì)磁盤子系統(tǒng)的請(qǐng)求,它將數(shù)據(jù)頁(yè)從磁盤和緩存讀入 RAM。一旦內(nèi)存頁(yè)被映射到高速緩沖區(qū),內(nèi)核便會(huì)試圖使用這些頁(yè),被稱作 MnPF,MnPF 通過重復(fù)使用內(nèi)存頁(yè)而縮短了內(nèi)核時(shí)間。
在下面示例中,time 命令顯示了當(dāng)一個(gè)程序啟動(dòng)的時(shí)候產(chǎn)生了多少 MPF 和 MnPF,在第一次啟動(dòng)的時(shí)候產(chǎn)生了很多 MPF:
# /usr/bin/time -v evolution
......
Major (requiring I/O) page faults: 163
Minor (reclaiming a frame) page faults: 5918
......
第二次啟動(dòng)的時(shí)候 MPF 消失因?yàn)槌绦蛞呀?jīng)在內(nèi)存中:
# /usr/bin/time -v evolution
......
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 5581
......
3)文件緩沖區(qū)
文件緩沖區(qū)可使內(nèi)核減少對(duì) MPFs 和 MnPFs 的使用, 隨著系統(tǒng)不斷地 IO 操作, 緩沖區(qū)會(huì)隨之增大, 直至內(nèi)存空閑空間不足并開始回收, 最終結(jié)果是系統(tǒng)管理員們開始關(guān)心這個(gè)事實(shí),但這只是系統(tǒng)正在很好的使用緩沖空間而已。
下面的輸入來自/proc/meminfo 文件:
# cat /proc/meminfo
MemTotal: 2075672 kB
MemFree: 52528 kB
Buffers: 24596 kB
Cached: 1766844 kB
......
以上顯示系統(tǒng)擁有 2G 內(nèi)存, 當(dāng)前有 52MB 空閑空間, 24MB 的 buffer 供應(yīng)磁盤寫操作, 1.7GB的 cache 由磁盤讀入內(nèi)存。內(nèi)核通過 MnPF 機(jī)制來使用這些東東,光這些數(shù)據(jù)還不足以說明系統(tǒng)出現(xiàn)瓶頸。
4)內(nèi)存頁(yè)面分類
在 linux 內(nèi)核中有 3 種內(nèi)核頁(yè):
* 讀取頁(yè)面——從磁盤讀入(MPF)的只讀頁(yè)面,這些頁(yè)面存在于緩沖區(qū)中包括不可改變的靜態(tài)文件,二進(jìn)制文件和庫(kù)文件。內(nèi)核會(huì)因需求而不斷地將他們讀入內(nèi)存,如
果內(nèi)存變得不夠用,內(nèi)核會(huì)將他們“竊取”至空閑列表,這將導(dǎo)致某個(gè)應(yīng)用通過 MPF將它們重新加載至內(nèi)存。
* 臟頁(yè)面——在內(nèi)存中被內(nèi)核修改的頁(yè)面,它們將被 pdflush 守護(hù)進(jìn)程回寫至磁盤, 當(dāng)內(nèi)存不夠用時(shí),kswapd 進(jìn)程也會(huì)和 pdflush 一道進(jìn)行回寫以釋放更多內(nèi)存空間。
* 無名頁(yè)面——它們屬于某個(gè)進(jìn)程,但是沒有任何文件或后端存儲(chǔ)與之關(guān)聯(lián),它們不能被回寫進(jìn)磁盤,當(dāng)內(nèi)存不夠用時(shí) kswapd 守護(hù)進(jìn)程會(huì)將它們寫入交換空間直至 RAM
釋放出來。
5)數(shù)據(jù)頁(yè)面磁盤回寫
應(yīng)用可能直接調(diào)用 fsync()或 sync()系統(tǒng)調(diào)用將臟頁(yè)面回寫入磁盤, 這些系統(tǒng)調(diào)用會(huì)直接請(qǐng)求至 I/O 調(diào)度器。如果一個(gè)應(yīng)用不調(diào)用它們,則 pdflush 守護(hù)進(jìn)程會(huì)時(shí)不時(shí)地進(jìn)行頁(yè)面回寫操作。
二、監(jiān)測(cè)磁盤 I/O
在一定條件下系統(tǒng)會(huì)出現(xiàn) I/O 瓶頸,可由很多監(jiān)測(cè)工具監(jiān)測(cè)到,如 top,vmstat,iostat,sar 等。這些工具輸入的信息大致一樣,也有不同之處,下面將討論出現(xiàn) I/O 瓶頸的情況。
計(jì)算每秒 IO 量:
每一次向磁盤的 IO 請(qǐng)求都會(huì)花費(fèi)一定時(shí)間,這主要是因?yàn)榇疟P必須旋轉(zhuǎn),磁頭必須檢索。磁盤的旋轉(zhuǎn)通常被稱為“旋轉(zhuǎn)延遲(rotational delay)” (RD) ,磁頭的移動(dòng)杯稱為“磁盤
檢索(disk seek)” (DS) 。因此每次 IO 請(qǐng)求的時(shí)間由 DS 和 RD 計(jì)算得來,磁盤的 RD 由驅(qū)動(dòng)氣的轉(zhuǎn)速所固定,一 RD 被為磁盤一轉(zhuǎn)的一半,計(jì)算一塊 10000 轉(zhuǎn)磁盤的 RD 如下:
1. 算出每轉(zhuǎn)的秒數(shù):60 秒/10000 轉(zhuǎn) = 0.006 秒/轉(zhuǎn)
2. 轉(zhuǎn)換為毫秒: 0.006*1000 毫秒 = 6 毫秒
3. 算出 RD 值: 6/2 = 3 毫秒
4. 加上平均檢索時(shí)間:3+3 = 6 毫秒
5. 加上內(nèi)部轉(zhuǎn)移等待時(shí)間: 6+2 = 8 毫秒
6. 算出一秒的 IO 數(shù):1000 毫秒/8 毫秒 = 125 次/秒(IOPS)
在一塊萬(wàn)轉(zhuǎn)硬盤上應(yīng)用每請(qǐng)求一次 IO 需要 8 毫秒,每秒可提供 120 到 150 次操作。
(2)利用iostat評(píng)估磁盤性能
[root@webserver ~]#   iostat -d 2 3
Linux 2.6.9-42.ELsmp (webserver)        12/01/2008      _i686_  (8 CPU)
Device:         tps  Blk_read/s   Blk_wrtn/s  Blk_read      Blk_wrtn
sda               1.87         2.58       114.12        6479462     286537372
Device:         tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00              0                0
Device:         tps   Blk_read/s   Blk_wrtn/s   Blk_read    Blk_wrtn
sda               1.00         0.00        12.00             0                24
對(duì)上面每項(xiàng)的輸出解釋如下:
tps平均每秒鐘的IO請(qǐng)求次數(shù)
Blk_read/s表示每秒讀取的數(shù)據(jù)塊數(shù)。
Blk_wrtn/s表示每秒寫入的數(shù)據(jù)塊數(shù)。
Blk_read表示讀取的所有塊數(shù)。
Blk_wrtn表示寫入的所有塊數(shù)。
可以通過Blk_read/s和Blk_wrtn/s的值對(duì)磁盤的讀寫性能有一個(gè)基本的了解,如果Blk_wrtn/s值很大,表示磁盤的寫操作很頻繁,可以考慮優(yōu)化磁盤或者優(yōu)化程序,如果Blk_read/s值很大,表示磁盤直接讀取操作很多,可以將讀取的數(shù)據(jù)放入內(nèi)存中進(jìn)行操作。
對(duì)于這兩個(gè)選項(xiàng)的值沒有一個(gè)固定的大小,根據(jù)系統(tǒng)應(yīng)用的不同,會(huì)有不同的值,但是有一個(gè)規(guī)則還是可以遵循的:長(zhǎng)期的、超大的數(shù)據(jù)讀寫,肯定是不正常的,這種情況一定會(huì)影響系統(tǒng)性能。
(3)利用sar評(píng)估磁盤性能
通過“sar –d”組合,可以對(duì)系統(tǒng)的磁盤IO做一個(gè)基本的統(tǒng)計(jì),請(qǐng)看下面的一個(gè)輸出:
[root@webserver ~]# sar -d 2 3
Linux 2.6.9-42.ELsmp (webserver)        11/30/2008      _i686_  (8 CPU)
11:09:33 PM  DEV     tps   rd_sec/s   wr_sec/s  avgrq-sz  avgqu-sz  await  svctm   %util
11:09:35 PM dev8-0  0.00  0.00            0.00        0.00          0.00         0.00   0.00     0.00
11:09:35 PM  DEV     tps  rd_sec/s    wr_sec/s  avgrq-sz  avgqu-sz await   svctm   %util
11:09:37 PM dev8-0  1.00  0.00         12.00        12.00         0.00        0.00    0.00     0.00
11:09:37 PM   DEV    tps    rd_sec/s  wr_sec/s   avgrq-sz  avgqu-sz await  svctm   %util
11:09:39 PM dev8-0  1.99   0.00         47.76         24.00       0.00        0.50    0.25     0.05
Average:  DEV          tps    rd_sec/s   wr_sec/s  avgrq-sz  avgqu-sz   await  svctm   %util
Average:  dev8-0      1.00   0.00          19.97         20.00       0.00         0.33    0.17     0.02
需要關(guān)注的幾個(gè)參數(shù)含義:
await表示平均每次設(shè)備I/O操作的等待時(shí)間(以毫秒為單位)。
svctm表示平均每次設(shè)備I/O操作的服務(wù)時(shí)間(以毫秒為單位)。
%util表示一秒中有百分之幾的時(shí)間用于I/O操作。
對(duì)以磁盤IO性能,一般有如下評(píng)判標(biāo)準(zhǔn):
正常情況下svctm應(yīng)該是小于await值的,而svctm的大小和磁盤性能有關(guān),CPU、內(nèi)存的負(fù)荷也會(huì)對(duì)svctm值造成影響,過多的請(qǐng)求也會(huì)間接的導(dǎo)致svctm值的增加。
await值的大小一般取決與svctm的值和I/O隊(duì)列長(zhǎng)度以及I/O請(qǐng)求模式,如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊(duì)列等待太長(zhǎng),系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?,此時(shí)可以通過更換更快的硬盤來解決問題。
%util項(xiàng)的值也是衡量磁盤I/O的一個(gè)重要指標(biāo),如果%util接近100%,表示磁盤產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷的在工作,該磁盤可能存在瓶頸。長(zhǎng)期下去,勢(shì)必影響系統(tǒng)的性能,可以通過優(yōu)化程序或者通過更換更高、更快的磁盤來解決此問題。
6、網(wǎng)絡(luò)性能評(píng)估
網(wǎng)絡(luò)是所有子系統(tǒng)中最難監(jiān)測(cè)的一個(gè), 因?yàn)榫W(wǎng)絡(luò)比較抽象, 在監(jiān)測(cè)時(shí)有很多在系統(tǒng)可控制之外的因素如延遲,沖突,擁塞和丟包等對(duì)監(jiān)測(cè)產(chǎn)生影響。下面將討論的是以太網(wǎng)、IP、TCP 的性能監(jiān)測(cè)。
1)以太網(wǎng)配置設(shè)定
除非有明確的設(shè)定, 所有以太網(wǎng)的速度都是自動(dòng)協(xié)商的, 這很大程度上是由于歷史原因造成的,早些時(shí)候一個(gè)網(wǎng)絡(luò)里經(jīng)常有不同網(wǎng)速和雙工模式的網(wǎng)絡(luò)設(shè)備。
大多數(shù)企業(yè)以太網(wǎng)是 100BaseTX 或 1000BaseTX,可以使用 ethtool 工具來判斷一個(gè)系統(tǒng)的網(wǎng)速。
下面的示例中一個(gè)擁有 100BaseTX 網(wǎng)卡的機(jī)器工作在 10BaseTX 下:
# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: Yes
Speed: 10Mb/s
Duplex: Half
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes
下面將其強(qiáng)制設(shè)定為 100BaseTX 模式:
# ethtool -s eth0 speed 100 duplex full autoneg off
# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised auto-negotiation: No
Speed: 100Mb/s
2)網(wǎng)絡(luò)吞吐量監(jiān)測(cè)
監(jiān)測(cè)網(wǎng)絡(luò)吞吐量最好的辦法是在兩個(gè)系統(tǒng)之間發(fā)送流量并統(tǒng)計(jì)其延遲和速度。
3)使用 iptraf 監(jiān)測(cè)本地吞吐量
iptraf 工具可提供以太網(wǎng)卡的吞吐量情況:
# iptraf -d eth0
上面的數(shù)據(jù)顯示被測(cè)試系統(tǒng)正以 61mbps(7.65M)頻率發(fā)送數(shù)據(jù),相比于 100mbps 網(wǎng)絡(luò)這有點(diǎn)低。
4)使用 netperf 監(jiān)測(cè)遠(yuǎn)端吞吐量
與 iptraf 的動(dòng)態(tài)監(jiān)測(cè)不一樣的是 netperf 使用可控方式測(cè)試網(wǎng)絡(luò), 這一點(diǎn)對(duì)測(cè)試一個(gè)客戶端到一個(gè)高負(fù)載服務(wù)器之間的吞吐量很有幫助,netperf 工具是以 C/S 模式運(yùn)行。
首先需要在服務(wù)器上運(yùn)行 netperf 服務(wù)端:
server# netserver
Starting netserver at port 12865
Starting netserver at hostname 0.0.0.0 port 12865 and family AF_UNSPEC
netperf 可以執(zhí)行多種測(cè)試,最基本的是標(biāo)準(zhǔn)測(cè)試:
client# netperf -H 192.168.1.215 -l 30
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to
192.168.1.230 (192.168.1.230) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size SizeTimeThroughput
bytes bytes bytessecs.10^6bits/sec
87380 16384 1638430.0289.46
輸出顯示吞吐量在 89mbps 左右,服務(wù)器和客戶端在同一網(wǎng)段。從一個(gè) 10 跳的 54G 無線網(wǎng)進(jìn)行測(cè)試只能達(dá)到 14mbps 左右:
client# netperf -H 192.168.1.215 -l 30
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to
192.168.1.215 (192.168.1.215) port 0 AF_INET
Recv  Send  Send
Socket  Socket Message Elapsed
Size  Size  Size  Time  Throughput
bytes  bytes  bytes  secs.  10^6bits/sec
87380  16384  16384  30.10  14.09
從 50 跳距離局域網(wǎng)測(cè)試:
# netperf -H 192.168.1.215 -l 30
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to
192.168.1.215 (192.168.1.215) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size SizeTimeThroughput
bytes bytes bytessecs.10^6bits/sec
87380 16384 1638430.645.05
從外網(wǎng)測(cè)試:
# netperf -H litemail.org -p 1500 -l 30
litemail.org (72.249.104.148) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size SizeTimeThroughput
bytes bytes bytessecs.10^6bits/sec
87380 16384 1638431.580.93
另外一個(gè)有用的測(cè)試模式是測(cè)試 TCP 請(qǐng)求應(yīng)答速率, 其原理是建立一個(gè) TCP 連接并發(fā)送多個(gè)請(qǐng)求:
client# netperf -t TCP_RR -H 192.168.1.230 -l 30
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET
to 192.168.1.230 (192.168.1.230) port 0 AF_INET
Local /Remote
Socket Size Request Resp. ElapsedTrans.
Send Recv SizeSizeTimeRate
bytes Bytes bytesbytessecs.per sec
16384 87380 1130.00 4453.80
16384 87380
數(shù)據(jù)顯示網(wǎng)絡(luò)可支持 4453 左右的 psh/ack 每秒,因?yàn)榘l(fā)送包的大小只有 1k。下面使用 2k的請(qǐng)求和 32k 的應(yīng)答:
client# netperf -t TCP_RR -H 192.168.1.230 -l 30 -- -r 2048,32768
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to
192.168.1.230 (192.168.1.230) port 0 AF_INET
Local /Remote
Socket Size RequestResp.ElapsedTrans.
Send Recv SizeSizeTimeRate
bytes Bytes bytesbytessecs.per sec
16384 87380 20483276830.00222.37
16384 87380
可以看到速率已經(jīng)降到 222 左右。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(1)通過ping命令檢測(cè)網(wǎng)絡(luò)的連通性
(2)通過netstat –i組合檢測(cè)網(wǎng)絡(luò)接口狀況
(3)通過netstat –r組合檢測(cè)系統(tǒng)的路由表信息
(4)通過sar –n組合顯示系統(tǒng)的網(wǎng)絡(luò)運(yùn)行狀態(tài)
l  netstat -antl  查看所有tcp status:
注意:可以通過netstat查看是否timewait過多的情況,導(dǎo)致端口不夠用,在短連接服務(wù)中且大并發(fā)情況下,要不系統(tǒng)的net.ipv4.tcp_tw_reuse、net.ipv4.tcp_tw_recycle兩個(gè)選項(xiàng)打開,允許端口重用。具體這兩個(gè)屬性如何用,移步線上/etc/sysctl.conf文件配置,有注釋。
sar查看網(wǎng)卡性能:sar -n DEV 1 100
Linux 2.6.32-431.20.3.el6.x86_64 (iZ25ug3hg9iZ)         09/18/2014      _x86_64_        (4 CPU)
04:01:23 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:01:24 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
04:01:24 PM      eth0      4.04      0.00      0.16      0.00      0.00      0.00      0.00
04:01:24 PM      eth1     26.26      0.00      1.17      0.00      0.00      0.00      0.00
各列含義:
IFACELAN接口
rxpck/s每秒鐘接收的數(shù)據(jù)包
txpck/s每秒鐘發(fā)送的數(shù)據(jù)包
rxbyt/s每秒鐘接收的字節(jié)數(shù)
txbyt/s每秒鐘發(fā)送的字節(jié)數(shù)
rxcmp/s每秒鐘接收的壓縮數(shù)據(jù)包
txcmp/s每秒鐘發(fā)送的壓縮數(shù)據(jù)包
rxmcst/s每秒鐘接收的多播數(shù)據(jù)包
其實(shí)中間的IFACELAN bond0是虛擬設(shè)備。在RH中,多個(gè)物理網(wǎng)卡幫定為一個(gè)邏輯bonding設(shè)備,通過把多個(gè)物理網(wǎng)卡幫定為一個(gè)邏輯設(shè)備,可以實(shí)現(xiàn)增加帶寬吞吐量,提供冗余。如何進(jìn)行虛擬化和模式選擇,請(qǐng)參考下面兩篇文章。
7、監(jiān)控利器
dstat是一個(gè)用來替換vmstat,iostat netstat,nfsstat和ifstat這些命令的工具, 是一個(gè)全能系統(tǒng)信息統(tǒng)計(jì)工具.它是由Python編寫的, 與sysstat相比,dstat是以一個(gè)彩色的界面動(dòng)態(tài)顯示,這樣數(shù)據(jù)比較顯眼,容易觀察,一目了然; 而且dstat支持即時(shí)刷新,可以使用相關(guān)參數(shù)指定顯示哪些內(nèi)容!下后會(huì)有說明。下面開始進(jìn)入dstat的神秘世界!!!!!!!!!!!!!!官方站點(diǎn):http://dag.wieers.com/home-made/dstat/#download
nginx+php-fpm的并發(fā)處理能力計(jì)算:
php-fpm進(jìn)程執(zhí)行時(shí)間=t ms
服務(wù)器cpu函數(shù)=n
并發(fā)執(zhí)行能力qps= 1s/t * 1000 *n.
如果平均php-fpm進(jìn)程執(zhí)行時(shí)間10ms, cpu=4核。 并發(fā)處理能力=1/10 × 1000 ×4= 400.
QPS = req/sec = 請(qǐng)求數(shù)/秒
【QPS計(jì)算PV和機(jī)器的方式】
QPS統(tǒng)計(jì)方式 [一般使用 http_load 進(jìn)行統(tǒng)計(jì)]
QPS = 總請(qǐng)求數(shù) / ( 進(jìn)程總數(shù) *   請(qǐng)求時(shí)間 )
QPS: 單個(gè)進(jìn)程每秒請(qǐng)求服務(wù)器的成功次數(shù)
單臺(tái)服務(wù)器每天PV計(jì)算
公式1:每天總PV = QPS *3600 * 6
公式2:每天總PV = QPS *3600 * 8
服務(wù)器計(jì)算
服務(wù)器數(shù)量 =   ceil( 每天總PV / 單臺(tái)服務(wù)器每天總PV )
【峰值QPS和機(jī)器計(jì)算公式】
原理:每天80%的訪問集中在20%的時(shí)間里,這20%時(shí)間叫做峰值時(shí)間
公式:( 總PV數(shù) * 80% ) / ( 每天秒數(shù) * 20% ) = 峰值時(shí)間每秒請(qǐng)求數(shù)(QPS)
機(jī)器:峰值時(shí)間每秒QPS / 單臺(tái)機(jī)器的QPS   = 需要的機(jī)器
問:每天300w PV 的在單臺(tái)機(jī)器上,這臺(tái)機(jī)器需要多少Q(mào)PS?
答:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)
問:如果一臺(tái)機(jī)器的QPS是58,需要幾臺(tái)機(jī)器來支持?
答:139 / 58 = 3
注意:如果 r經(jīng)常大于 4 ,且id經(jīng)常少于40,表示cpu的負(fù)荷很重。
如果si,so 長(zhǎng)期不等于0,表示內(nèi)存不足。
如果disk 經(jīng)常不等于0, 且在 b中的隊(duì)列大于3, 表示 io性能不好。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
vmstat詳解_思無涯
服務(wù)器性能優(yōu)化的正確姿勢(shì)(好文推薦)
Linux性能分析工具匯總合集
服務(wù)器并發(fā)處理能力
一文讀懂計(jì)算機(jī)內(nèi)核態(tài)、用戶態(tài)和零拷貝技術(shù)
【竺】性能測(cè)試筆記15——常用的Linux命令
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服