來源:半劫小仙 發(fā)布時(shí)間:2019-01-14 14:41:11 閱讀量:2133
本文節(jié)選自淺談服務(wù)器性能測(cè)試的全生命周期——從測(cè)試、結(jié)果分析到優(yōu)化策略
小白用戶一個(gè),前段時(shí)間自己選擇云服務(wù)器時(shí)就面臨了不知道選什么參數(shù)配置的問題,也不知道各個(gè)性能指標(biāo)是怎樣限制服務(wù)器性能的。覺得此文拿來做科普非常好,這里備忘一下。
硬件對(duì)服務(wù)器性能影響還是蠻大的,如果是土豪的話,可以直接買最好的。我們分析硬件主要是希望選擇合適的配置,節(jié)約資源,避免出現(xiàn)高射炮打蚊子的情況。
在資金的充足下,一般來說CPU的數(shù)量越多,主頻越高,那么服務(wù)器的性能也就會(huì)越好。在實(shí)際測(cè)試過程中,如果在大壓力下持續(xù)觀察CPU的使用率很低,那么CPU的資源基本上是可以滿足服務(wù)器要求的。這樣的情況其實(shí)是有點(diǎn)浪費(fèi)CPU資源的,比較理想的情況是壓力不大的時(shí)候CPU利用率比較低,壓力上來之后CPU利用率保持在60%-70%。
大部分的CPU在同一時(shí)間內(nèi)只能運(yùn)行一個(gè)線程,但是超線程的處理器可以在同一個(gè)時(shí)間運(yùn)行多個(gè)線程,我們可以利用處理前超線程特性提高系統(tǒng)性能。雖然采用超線程技術(shù)能同時(shí)執(zhí)行兩個(gè)線程,但它并不象兩個(gè)真正的CPU那樣,每個(gè)CPU都具有獨(dú)立的資源。當(dāng)兩個(gè)線程都同時(shí)需要某一個(gè)資源時(shí),其中一個(gè)要暫時(shí)停止,并讓出資源,直到這些資源閑置后才能繼續(xù)。因此超線程的性能并不等于兩顆CPU的性能。
內(nèi)存的大小也是影響服務(wù)器性能的一個(gè)重要因素。內(nèi)存太小,系統(tǒng)進(jìn)程要被阻塞,應(yīng)用程序會(huì)變得緩慢,甚至是失去響應(yīng);如果太大的話,也是造成一種浪費(fèi)。Linux系統(tǒng)中采用物理內(nèi)存和虛擬內(nèi)存兩種方式,使用虛擬內(nèi)存可以緩解物理內(nèi)存的不足,但是如果占用過多的虛擬內(nèi)存的話,應(yīng)用程序的性能會(huì)明顯的下降。
網(wǎng)絡(luò)帶寬的大小限制了客戶端與服務(wù)器交互的流量,相對(duì)其他硬件資源,網(wǎng)絡(luò)帶寬在價(jià)格上更貴。這需要我們合理預(yù)估服務(wù)器的可服務(wù)器能力,需要占用的帶寬資源。
目前磁盤都是機(jī)械方式運(yùn)作的,主要體現(xiàn)在磁盤讀寫前尋找磁道的過程。磁盤自帶的讀寫緩存大小,對(duì)于磁盤讀寫速度至關(guān)重要。讀寫速度快的磁盤,通常都帶有較大的讀寫緩存。磁盤的尋道過程是機(jī)械方式,決定了其隨機(jī)讀寫速度將明顯低于順序讀寫。在我們做系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)時(shí),需要考慮到磁盤的這一特性。
不同的操作系統(tǒng)在內(nèi)核實(shí)現(xiàn)上可能各不相同,因而對(duì)運(yùn)行在上面的應(yīng)用程序來說可能影響比較大。
筆者并沒有做過分析不同操作系統(tǒng)對(duì)服務(wù)器性能的影響,因?yàn)橹挥眠^Linux開發(fā)服務(wù)器程序。Linux操作系統(tǒng)在這十幾年發(fā)展的異常迅猛,目前大部分的服務(wù)器都是運(yùn)行在Linux操作系統(tǒng)上的。Linux目前具有最好的生態(tài)系統(tǒng),服務(wù)器端的各種軟件都為它而設(shè)計(jì),默認(rèn)都認(rèn)為你是在 Linux 上跑,你要是整一個(gè)非 Linux 的服務(wù)器,你得有足夠的心理準(zhǔn)備,因?yàn)槌霈F(xiàn)任何問題,你可能未必能找到能幫你解決問題的人。
先說一個(gè)小故事。福特公司一套重要設(shè)備出現(xiàn)故障,找了很多人來維修,結(jié)果都沒有維修好,沒辦法了,就在購(gòu)買設(shè)備的英國(guó)公司高價(jià)聘請(qǐng)一位工程師過來維修,工程師來到之后,反復(fù)查找原因,最后在一個(gè)小零件上劃了一條線,然后對(duì)旁邊福特公司的人說,在劃線的地方切掉就好了,果不其然,切掉之后故障真的解除了,按照合約,福特公司應(yīng)支付公司一萬(wàn)美元,周圍的人都唏噓不已,感嘆一條線就可以價(jià)值一萬(wàn)美元,工程師回答到:那條線只值一美元,而怎樣找到那條線值9999美元。
我們?cè)跍y(cè)試服務(wù)器的過程中,經(jīng)常會(huì)遇到性能上不去。查看CPU,網(wǎng)絡(luò),IO消耗都挺低的,就是定位不到問題的原因。有經(jīng)驗(yàn)的程序員可能會(huì)告訴你你把某個(gè)參數(shù)修改一下,立馬性能噌噌噌上去了。比如mysql相關(guān)設(shè)置,系統(tǒng)文件描述符,緩沖區(qū)大小,time_wait快速回收設(shè)置等,甚至是線程池配置的線程個(gè)數(shù)也會(huì)對(duì)服務(wù)器的性能產(chǎn)生較大的影響。
關(guān)于數(shù)據(jù)庫(kù)參數(shù)的設(shè)置,比如mysql的配置文件my.cnf文件中,修改不同的配置(比如innodb_flush_log_at_trx_commit 設(shè)置為0,1還是2 )可能會(huì)對(duì)數(shù)據(jù)庫(kù)的讀寫性能影響很大。
比如程序中需要頻繁申請(qǐng)內(nèi)存,使用bzero和memset對(duì)服務(wù)器性能影響差距可能會(huì)很大。
另外程序中的一些查詢操作,采用不同的數(shù)據(jù)結(jié)構(gòu),可以實(shí)現(xiàn)時(shí)間和空間上的相互轉(zhuǎn)化,從而影響服務(wù)器的性能。
在線
客服
服務(wù)時(shí)間:周一至周日 08:30-18:00
選擇下列產(chǎn)品馬上在線溝通:
客服
熱線
7*24小時(shí)客服服務(wù)熱線
關(guān)注
微信
關(guān)注官方微信