性能測(cè)試中服務(wù)器關(guān)鍵性能指標(biāo)淺析

在對(duì)互聯(lián)網(wǎng)服務(wù)進(jìn)行服務(wù)端性能測(cè)試時(shí)经伙,主要關(guān)注兩方面的性能指標(biāo):

  • 業(yè)務(wù)指標(biāo):如吞吐量(QPS础锐、TPS)嗓节、響應(yīng)時(shí)間(RT)荧缘、并發(fā)數(shù)皆警、業(yè)務(wù)成功率等
  • 資源指標(biāo):如CPU、內(nèi)存截粗、Disk I/O信姓、Network I/O等資源的消耗情況
    本文主要介紹一些廣泛適用的、基本的資源指標(biāo)以及這些指標(biāo)在Linux服務(wù)器的獲取方式绸罗。

一. CPU

關(guān)于CPU資源意推,有三個(gè)重要概念是我們需要關(guān)注的:使用率、運(yùn)行隊(duì)列和上下文切換珊蟀,這里借助一張描述進(jìn)程狀態(tài)的圖來(lái)進(jìn)行簡(jiǎn)要說(shuō)明:


Process state -via wikipedia
  • Running:正在運(yùn)行的進(jìn)程
  • Waiting:已準(zhǔn)備就緒菊值,等待運(yùn)行的進(jìn)程
  • Blocked:因?yàn)榈却承┦录瓿啥枞倪M(jìn)程,通常是在等待I/O育灸,如Disk I/O腻窒,Network I/O等。

這里的Running和Waiting共同構(gòu)成Linux進(jìn)程狀態(tài)中的可運(yùn)行狀態(tài)(task_running)磅崭,而B(niǎo)locked狀態(tài)可以對(duì)應(yīng)Linux進(jìn)程狀態(tài)中的不可中斷睡眠狀態(tài)(task_uninterruptible)

在Linux可以使用vmstat來(lái)獲取這些數(shù)據(jù):

[hbase@ecs-097 ~]$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 6  0      0 4591436 176804 1185380    0    0     0     0 7915 10357 83  5 12  0  0

CPU使用率(CPU Utilization Percentages):有進(jìn)程處于Running狀態(tài)的時(shí)間/總時(shí)間儿子。在vmstat主要通過(guò)ussysid三列數(shù)據(jù)來(lái)體現(xiàn):

  • us:用戶(hù)占用CPU的百分比
  • sy:系統(tǒng)(內(nèi)核和中斷)占用CPU的百分比
  • id:CPU空閑的百分比

性能測(cè)試指標(biāo)中砸喻,CPU使用率通常用us + sy來(lái)計(jì)算柔逼,其可接受上限通常在70%~80%。另外需要注意的是割岛,在測(cè)試過(guò)程中愉适,如果sy的值長(zhǎng)期大于25%,應(yīng)該關(guān)注in(系統(tǒng)中斷)和cs(上下文切換)的數(shù)值癣漆,并根據(jù)被測(cè)應(yīng)用的實(shí)現(xiàn)邏輯來(lái)分析是否合理维咸。

運(yùn)行隊(duì)列進(jìn)程數(shù)(Processes on run queue):Running狀態(tài) + Waiting狀態(tài)的進(jìn)程數(shù),展示了正在運(yùn)行和等待CPU資源的任務(wù)數(shù),可以看作CPU的工作清單腰湾,是判斷CPU資源是否成為瓶頸的重要依據(jù)雷恃。vmstat通過(guò)r的值來(lái)體現(xiàn):

  • r: 可運(yùn)行進(jìn)程數(shù),包括正在運(yùn)行(Running)和已就緒等待運(yùn)行(Waiting)的费坊。

如果r的值等于系統(tǒng)CPU總核數(shù)倒槐,則說(shuō)明CPU已經(jīng)滿(mǎn)負(fù)荷。在負(fù)載測(cè)試中附井,其可接受上限通常不超過(guò)CPU核數(shù)的2倍讨越。

上下文切換(Context Switches):簡(jiǎn)單來(lái)說(shuō),context指CPU寄存器和程序計(jì)數(shù)器在某時(shí)間點(diǎn)的內(nèi)容永毅,(進(jìn)程)上下文切換即kernel掛起一個(gè)進(jìn)程并將該進(jìn)程此時(shí)的狀態(tài)存儲(chǔ)到內(nèi)存把跨,然后從內(nèi)存中恢復(fù)下一個(gè)要執(zhí)行的進(jìn)程原來(lái)的狀態(tài)到寄存器,從其上次暫停的執(zhí)行代碼開(kāi)始繼續(xù)執(zhí)行至頻繁的上下文切換將導(dǎo)致sy值增長(zhǎng)沼死。vmstat通過(guò)cs的值來(lái)體現(xiàn):

  • cs:每秒上下文切換次數(shù)着逐。

另外還有一個(gè)指標(biāo)用來(lái)作為系統(tǒng)在一段時(shí)間內(nèi)的負(fù)載情況的參考:
平均負(fù)載Load Average:在UNIX系統(tǒng)中,Load是對(duì)系統(tǒng)工作量的度量意蛀。Load取值有兩種情況耸别,多數(shù)UNIX系統(tǒng)取運(yùn)行隊(duì)列的值(vmstat輸出的r),而Linux系統(tǒng)取運(yùn)行隊(duì)列的值 + 處于task_uninterruptible狀態(tài)的進(jìn)程數(shù)(vmstat輸出的b)**县钥,所以會(huì)出現(xiàn)CPU使用率不高但Load值很高的情況秀姐。Load Average就是在一段時(shí)間內(nèi)的平均負(fù)載,系統(tǒng)工具top若贮、uptime等提供1分鐘省有、5分鐘和15分鐘的平均負(fù)載值。

[hbase@ecs-097 ~]$ top
top - 19:23:28 up 18:05,  3 users,  load average: 0.80, 0.60, 0.53

上面示例中的0.80即是1分鐘內(nèi)的Load average谴麦,以此類(lèi)推蠢沿。
當(dāng)我們需要了解當(dāng)前系統(tǒng)負(fù)載情況時(shí),可以先查看Load average的值细移,如果系統(tǒng)持續(xù)處于高負(fù)載(如15分鐘平均負(fù)載大于CPU總核數(shù)的兩倍)搏予,則查看vmstat的r值和b值來(lái)確認(rèn)是CPU負(fù)荷重還是等待I/O的進(jìn)程太多。

二. Memory

Memory資源也有三方面需要關(guān)注:可用內(nèi)存弧轧,swap占用雪侥,頁(yè)面交換(Paging),仍然借助一張圖來(lái)說(shuō)明:


Virtual Memory

這里講到的內(nèi)存精绎,包括物理內(nèi)存和虛擬內(nèi)存速缨,如上圖所示,物理內(nèi)存和硬盤(pán)上的一塊空間(SWAP)組合起來(lái)作為虛擬內(nèi)存(Virtual Memory)為進(jìn)程的運(yùn)行提供一個(gè)連續(xù)的內(nèi)存空間代乃,這樣的好處是進(jìn)程可用的內(nèi)存變大了旬牲,但需要注意的是仿粹,SWAP的讀寫(xiě)速度遠(yuǎn)低于物理內(nèi)存,并且物理內(nèi)存和swap之間的數(shù)據(jù)交換會(huì)增加系統(tǒng)負(fù)擔(dān)原茅。虛擬內(nèi)存被分成頁(yè)(x86系統(tǒng)默認(rèn)頁(yè)大小為4k)吭历,內(nèi)核讀寫(xiě)虛擬內(nèi)存以頁(yè)為單位,當(dāng)物理內(nèi)存空間不足時(shí)擂橘,內(nèi)存調(diào)度會(huì)將物理內(nèi)存上不常使用的內(nèi)存頁(yè)數(shù)據(jù)存儲(chǔ)到磁盤(pán)的SWAP空間晌区,物理內(nèi)存與swap空間之間的數(shù)據(jù)交換過(guò)程稱(chēng)為頁(yè)面交換(Paging)。

可用內(nèi)存(free memory):內(nèi)存占用的直觀(guān)數(shù)據(jù)通贞,vmstat輸出free的值朗若,可用內(nèi)存過(guò)小將影響整個(gè)系統(tǒng)的運(yùn)行效率,對(duì)于穩(wěn)定運(yùn)行的系統(tǒng)昌罩,free可接受的范圍通常應(yīng)該大于物理內(nèi)存的20%哭懈,即內(nèi)存占用應(yīng)該小于物理內(nèi)存的80%。在壓力測(cè)試時(shí)茎用,系統(tǒng)內(nèi)存資源的情況應(yīng)該用可用內(nèi)存結(jié)合頁(yè)面交換情況來(lái)判斷遣总,如果可以?xún)?nèi)存很少,但頁(yè)面交換也很少绘搞,此時(shí)可以認(rèn)為內(nèi)存資源還對(duì)系統(tǒng)性能構(gòu)成嚴(yán)重影響彤避。

頁(yè)面交換(Paging):頁(yè)面交換包括從SWAP交換到內(nèi)存和從內(nèi)存交換到SWAP,如果系統(tǒng)出現(xiàn)頻繁的頁(yè)面交換夯辖,需要引起注意《危可以從vmstat的si和so獲容锕印:

  • si:每秒從SWAP讀取到內(nèi)存的數(shù)據(jù)大小
  • so:每秒從內(nèi)存寫(xiě)入到SWAP的數(shù)據(jù)大小

SWAP空間占用:可以從vmstat的swpd來(lái)獲取當(dāng)前SWAP空間的使用情況,應(yīng)該和頁(yè)面交換結(jié)合來(lái)分析卒暂,比如當(dāng)swpd不為0啄栓,但si,so持續(xù)保持為0時(shí)也祠,內(nèi)存資源并沒(méi)有成為系統(tǒng)的瓶頸昙楚。

三. Disk

磁盤(pán)通常是系統(tǒng)中最慢的一環(huán),一是其自身速度慢诈嘿,即使是SSD堪旧,其讀寫(xiě)速度與內(nèi)存都還存在數(shù)量級(jí)的差距,二是其離CPU最遠(yuǎn)奖亚。另外需要說(shuō)明的是磁盤(pán)IO分為隨機(jī)IO順序IO兩種類(lèi)型淳梦,在性能測(cè)試中應(yīng)該先了解被測(cè)系統(tǒng)是偏向哪種類(lèi)型。

  • 隨機(jī)IO:隨機(jī)讀寫(xiě)數(shù)據(jù)昔字,讀寫(xiě)請(qǐng)求多爆袍,每次讀寫(xiě)的數(shù)據(jù)量較小,其IO速度更依賴(lài)于磁盤(pán)每秒能IO次數(shù)(IOPS)。
  • 順序IO:順序請(qǐng)求大量數(shù)據(jù)陨囊,讀寫(xiě)請(qǐng)求個(gè)數(shù)相對(duì)較少弦疮,每次讀寫(xiě)的數(shù)據(jù)量較大,順序IO更重視每次IO的數(shù)據(jù)吞吐量蜘醋。

對(duì)于磁盤(pán)挂捅,首要關(guān)注使用率,IOPS和數(shù)據(jù)吞吐量堂湖,在Linux服務(wù)區(qū)闲先,可以使用iostat來(lái)獲取這些數(shù)據(jù)。

[hbase@ecs-097 ~]$ iostat -dxk 1
Linux 2.6.32-504.3.3.el6.x86_64 (ecs-097)   08/01/2016  _x86_64_    (4 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.52    0.00    0.13    0.06    0.00   99.28
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
xvda              0.10     6.63    0.40    2.57     6.22    36.80    29.00     0.04   14.63   1.19   0.35

(設(shè)備)使用率:統(tǒng)計(jì)過(guò)程中處理I/O請(qǐng)求的時(shí)間與統(tǒng)計(jì)時(shí)間的百分比无蜂,即iostat輸出中的%util伺糠,如果該值大于60%,很可能降低系統(tǒng)的性能表現(xiàn)斥季。

IOPS:每秒處理讀/寫(xiě)請(qǐng)求的數(shù)量训桶,即iostat輸出中的r/s和w/s,個(gè)人PC的機(jī)械硬盤(pán)IOPS一般在100左右酣倾,而各種公有云/私有云的普通服務(wù)器舵揭,也只在百這個(gè)數(shù)量級(jí)。預(yù)先獲取到所用服務(wù)區(qū)的IOPS能力躁锡,然后在性能測(cè)試中監(jiān)控試試的IOPS數(shù)據(jù)午绳,來(lái)衡量當(dāng)前的磁盤(pán)是否能滿(mǎn)足系統(tǒng)的IO需求。

數(shù)據(jù)吞吐量:每秒讀/寫(xiě)的數(shù)據(jù)大小映之,即iostat輸出中的rkB/s和wkB/s拦焚,通常磁盤(pán)的數(shù)據(jù)吞吐量與IO類(lèi)型有直接關(guān)系,順序IO的吞吐能力明顯優(yōu)與隨機(jī)讀寫(xiě)杠输,可以預(yù)先測(cè)得磁盤(pán)在隨機(jī)IO和順序IO下的吞吐量赎败,以便于測(cè)試時(shí)監(jiān)控到的數(shù)據(jù)進(jìn)行比較衡量。

四. Network

網(wǎng)絡(luò)本身是系統(tǒng)中一個(gè)非常復(fù)雜的部分蠢甲,但常規(guī)的服務(wù)端性能測(cè)試通常放在一個(gè)局域網(wǎng)進(jìn)行僵刮,因?yàn)槲覀兪紫汝P(guān)注被測(cè)系統(tǒng)自身的性能表現(xiàn),并且需要保證能在較少的成本下發(fā)起足夠大的壓力鹦牛。因此對(duì)于多數(shù)系統(tǒng)的性能測(cè)試搞糕,我們主要關(guān)注網(wǎng)絡(luò)吞吐量即可,對(duì)于穩(wěn)定運(yùn)行的系統(tǒng)能岩,需要為被測(cè)場(chǎng)景外的業(yè)務(wù)流出足夠的帶寬寞宫;在壓力測(cè)試過(guò)程中,需要注意瓶頸可能來(lái)自于帶寬拉鹃。
在Linuxf服務(wù)器辈赋,可以使用iptraf來(lái)查看本機(jī)網(wǎng)絡(luò)吞吐量鲫忍,如:

[root@ecs-097 ~]# iptraf -d eth0
x Total rates:         67.8 kbits/sec        Broadcast packets:            0                                                                                                                x
x                      54.2 packets/sec      Broadcast bytes:              0                                                                                                                x
x                                                                                                                                                                                           x
x Incoming rates:      19.2 kbits/sec                                                                                                                                                       x
x                      25.4 packets/sec                                                                                                                                                     x
x                                            IP checksum errors:           0                                                                                                                x
x Outgoing rates:      48.7 kbits/sec                                                                                                                                                       x
x                      28.8 packets/sec 

五. 總結(jié)

性能測(cè)試中,數(shù)據(jù)收集很重要钥屈,但是更重要的是快速抓住關(guān)鍵數(shù)據(jù)悟民,讀懂?dāng)?shù)據(jù)的含義。
本文主要介紹服務(wù)端性能測(cè)試中篷就,對(duì)于CPU射亏、內(nèi)存等各種系統(tǒng)資源,通常首要關(guān)注的數(shù)據(jù)竭业,以及這些數(shù)據(jù)在Linux服務(wù)器上的獲取方式智润。
在實(shí)際測(cè)試中,通常會(huì)持續(xù)收集這些數(shù)據(jù)未辆,如使用nmon窟绷,JMeter的PerfMon插件,以及zabbix等專(zhuān)門(mén)的系統(tǒng)監(jiān)控工具咐柜,這就不在本文展開(kāi)了兼蜈。

References

Load (computing)
Process state
Linux Performance Analysis in 60,000 Milliseconds

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拙友,隨后出現(xiàn)的幾起案子为狸,更是在濱河造成了極大的恐慌,老刑警劉巖遗契,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辐棒,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡姊途,警方通過(guò)查閱死者的電腦和手機(jī)涉瘾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捷兰,“玉大人,你說(shuō)我怎么就攤上這事负敏」泵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵其做,是天一觀(guān)的道長(zhǎng)顶考。 經(jīng)常有香客問(wèn)我,道長(zhǎng)妖泄,這世上最難降的妖魔是什么驹沿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任蹈胡,我火速辦了婚禮渊季,結(jié)果婚禮上朋蔫,老公的妹妹穿的比我還像新娘。我一直安慰自己却汉,他們只是感情好驯妄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著合砂,像睡著了一般青扔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翩伪,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天微猖,我揣著相機(jī)與錄音,去河邊找鬼缘屹。 笑死凛剥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的囊颅。 我是一名探鬼主播当悔,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼踢代!你這毒婦竟也來(lái)了盲憎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胳挎,失蹤者是張志新(化名)和其女友劉穎饼疙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體慕爬,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窑眯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了医窿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磅甩。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖姥卢,靈堂內(nèi)的尸體忽然破棺而出卷要,到底是詐尸還是另有隱情,我是刑警寧澤独榴,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布僧叉,位于F島的核電站,受9級(jí)特大地震影響棺榔,放射性物質(zhì)發(fā)生泄漏瓶堕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一症歇、第九天 我趴在偏房一處隱蔽的房頂上張望郎笆。 院中可真熱鬧谭梗,春花似錦、人聲如沸题画。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苍息。三九已至缩幸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竞思,已是汗流浹背表谊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盖喷,地道東北人爆办。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像课梳,于是被迫代替她去往敵國(guó)和親距辆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 這篇文章主要介紹一些常用的linux服務(wù)器性能監(jiān)控命令暮刃,包括命令的常用參數(shù)跨算、指標(biāo)的含義以及一些交互操作。 幾個(gè)問(wèn)題...
    dancingking閱讀 8,346評(píng)論 6 22
  • Java 應(yīng)用性能優(yōu)化是一個(gè)老生常談的話(huà)題椭懊,典型的性能問(wèn)題如頁(yè)面響應(yīng)慢诸蚕、接口超時(shí),服務(wù)器負(fù)載高氧猬、并發(fā)數(shù)低背犯,數(shù)據(jù)庫(kù)頻...
    Rick617閱讀 7,333評(píng)論 1 9
  • 基本概念 QPS:query per second, 1秒內(nèi)完成的請(qǐng)求數(shù)RT:response time, 1個(gè)請(qǐng)...
    PennyWong閱讀 7,448評(píng)論 0 18
  • forLovn閱讀 395評(píng)論 1 0
  • 【使徒行傳 16: 25, 31】約在半夜, 保羅和西拉禱告, 唱詩(shī)贊美神, 眾囚犯也側(cè)耳而聽(tīng)......他們說(shuō):...
    高橋先生閱讀 3,800評(píng)論 2 1