丨如何制定性能調(diào)優(yōu)策略_第1頁(yè)
丨如何制定性能調(diào)優(yōu)策略_第2頁(yè)
丨如何制定性能調(diào)優(yōu)策略_第3頁(yè)
丨如何制定性能調(diào)優(yōu)策略_第4頁(yè)
丨如何制定性能調(diào)優(yōu)策略_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

微基準(zhǔn)微基準(zhǔn)性能測(cè)試可以精準(zhǔn)定位到某個(gè)模塊或者某個(gè)方法的性能問(wèn)題,特別適合做一個(gè)功能模塊或者一個(gè)方法在不同實(shí)現(xiàn)方式下的性能對(duì)比。例如,對(duì)比一個(gè)方法使用同步實(shí)現(xiàn)和非同步實(shí)現(xiàn)的性能。宏基準(zhǔn)然后看測(cè)試場(chǎng)景。我們需要確定在測(cè)試某個(gè)接口時(shí),是否有其他業(yè)務(wù)接口同時(shí)也在平行運(yùn)行,造成干擾。如果有,請(qǐng)重視,因?yàn)槟阋坏┖鲆暳诉@種干擾,就會(huì)系統(tǒng)是否達(dá)標(biāo)。不達(dá)標(biāo),就進(jìn)行優(yōu)化;達(dá)標(biāo),就繼續(xù)加大測(cè)試的并發(fā)數(shù),探底接口的TPS(最大每秒事務(wù)處理量),這樣做,可以深入了解到接口的性能。除了測(cè)試接口的吞吐量和響應(yīng)時(shí)間以外,我們還需要循環(huán)測(cè)試可能導(dǎo)致性能問(wèn)題的接口,觀察各個(gè)服務(wù)器的CPU、內(nèi)存以及I/O使用率的變化。熱身問(wèn)在Java編程語(yǔ)言和環(huán)境中,.java文件編譯成為.class文件后,機(jī)器還是無(wú)法直接.class件中的字節(jié)碼,需要通過(guò)解釋器將字節(jié)碼轉(zhuǎn)換成本地機(jī)器碼才能運(yùn)行。為了節(jié)約內(nèi)隨著代碼被執(zhí)行的次數(shù)增多,當(dāng)虛擬機(jī)發(fā)現(xiàn)某個(gè)方法或代碼塊運(yùn)行得特別頻繁時(shí),就會(huì)把這些代碼認(rèn)定為熱點(diǎn)代碼(HotpotCoe)。為了提高熱點(diǎn)代碼的執(zhí)行效率,在運(yùn)行時(shí),虛擬機(jī)將會(huì)通過(guò)即時(shí)編譯器(JTcomiler,jus-i-imecomiler)把這些代碼編譯成與本地平臺(tái)相關(guān)的機(jī)器碼,并進(jìn)行各層次的優(yōu)化,然后在內(nèi)存中,之后每次運(yùn)行代碼時(shí),性能不穩(wěn)JVM回收的不同等等。 多JVM情況下的影如果我們的服務(wù)器有多個(gè)Jaa應(yīng)用服務(wù),部署在不同的Tomat下,這就意味著我們的服務(wù)器會(huì)有多個(gè)JVM。任意一個(gè)JVM都擁有整個(gè)系統(tǒng)的資源使用權(quán)。如果一臺(tái)機(jī)器上只部署單獨(dú)的一個(gè)JVM,在做性能測(cè)試時(shí),很好,或者你調(diào)優(yōu)的效果很好,但在一臺(tái)機(jī)器多個(gè)JVM的情況下就不一定了。所以我們應(yīng)該盡量避免線(xiàn)上環(huán)境中一臺(tái)機(jī)器部署多個(gè)JVM的情況。這里我將“三步走”中的分析和調(diào)優(yōu)結(jié)合在一起其中需要包含測(cè)試接口的平均、最大和最小吞吐量,響應(yīng)時(shí)間,服務(wù)器的CPU、內(nèi)存、I/O、網(wǎng)絡(luò)IO使用率,JVM的GC頻率等。通過(guò)觀察這些調(diào)優(yōu)標(biāo)準(zhǔn),可以發(fā)現(xiàn)性能瓶頸,我們?cè)偻ㄟ^(guò)自下而上的方式分析查找問(wèn)題。首先從操作系統(tǒng)層面,查看系統(tǒng)的CPU、內(nèi)存、/O、網(wǎng)絡(luò)的使用率是否存在異常,再通過(guò)命令查找異常日志,最后通過(guò)分析日志,找到導(dǎo)致瓶頸的原因;還可以從Jaa應(yīng)用的JVM層面,查看JVM的回收頻率以及內(nèi)存分配情況是否存在異常,分析日志,找到導(dǎo)致瓶如果系統(tǒng)和JVM層面都沒(méi)有出現(xiàn)異常情況,我們可以查看應(yīng)用服務(wù)業(yè)務(wù)層是否存在性能瓶頸,例如Java編程的問(wèn)題、讀寫(xiě)數(shù)據(jù)瓶頸等等。分析查找問(wèn)題是一個(gè)復(fù)雜而又細(xì)致的過(guò)程,某個(gè)性能問(wèn)題可能是一個(gè)原因?qū)е碌?,也可能是幾個(gè)原因共同導(dǎo)致的結(jié)果。我們分析查找問(wèn)題可以采用自下而上的方式,而我們解決系統(tǒng)性能問(wèn)題,則可以采用自上而下的方式逐級(jí)優(yōu)化。下面我來(lái)介紹下從應(yīng)用層到操作系統(tǒng)層的幾種調(diào)優(yōu)策略。優(yōu)化代應(yīng)用層的問(wèn)題代碼往往會(huì)因?yàn)楹谋M系統(tǒng)資源而出來(lái)。例如,我們某段代碼導(dǎo)致內(nèi)存溢出,往往是將JVM中的內(nèi)存用完了,這個(gè)時(shí)候系統(tǒng)的內(nèi)存資源消耗殆盡了,同時(shí)也會(huì)JVM頻繁地發(fā)生回收,導(dǎo)致CPU100%以上居高不下,這個(gè)時(shí)候又消耗了系統(tǒng)的CPU資源。優(yōu)化。例如,我們經(jīng)常使用的LinkedList集合,如果使用for循環(huán)遍歷該容器,將大大降這時(shí)有經(jīng)驗(yàn)的同學(xué),就會(huì)改用Itor(迭代器)迭代循環(huán)該集合,這是因?yàn)槭擎湵韺?shí)現(xiàn)的,如果使用for環(huán)獲取元素,在每次循環(huán)獲取元素時(shí),都會(huì)去遍歷一次List,優(yōu)化設(shè)面向?qū)ο笥泻芏嘣O(shè)計(jì)模式,可以幫助我們優(yōu)化業(yè)務(wù)層以及中間件層的代碼設(shè)計(jì)。優(yōu)化后,不僅可以精簡(jiǎn)代碼,還能提高整體性能。例如,單例模式在頻繁調(diào)用創(chuàng)建對(duì)象的場(chǎng)景中,可以共個(gè)創(chuàng)建對(duì)象,這樣可以減少頻繁地創(chuàng)建和銷(xiāo)毀對(duì)象所帶來(lái)的性能消耗。優(yōu)化算時(shí)間換例如,我在03講就會(huì)詳解的用String對(duì)象的intern方法,可以將重復(fù)率比較高的數(shù)據(jù)集使用的是HashMap數(shù)據(jù)結(jié)構(gòu)類(lèi)型,如果我們數(shù)據(jù)過(guò)多,查詢(xún)的性能就會(huì)下降。所以空間換這種方法是使用空間來(lái)提升速度?,F(xiàn)在很多系統(tǒng)都是使用的MySQL數(shù)據(jù)庫(kù),較因?yàn)镸ySQL單表在千萬(wàn)數(shù)據(jù)以上時(shí),讀寫(xiě)性能會(huì)明顯下降,這個(gè)時(shí)候我們需要將表數(shù)據(jù)通過(guò)某個(gè)字段Hash或者其他方式分拆,系統(tǒng)查詢(xún)數(shù)據(jù)時(shí),會(huì)根據(jù)條件的Hash參數(shù)調(diào)以上都是業(yè)務(wù)層代碼的優(yōu)化,除此之外,JVM、Web器以及操作系統(tǒng)的優(yōu)化也是非常關(guān)根據(jù)自己的業(yè)務(wù)場(chǎng)景,合理地設(shè)置JVM的內(nèi)存空間以及回收算法可以提升系統(tǒng)性能。年代。這樣可以減少年輕代頻繁發(fā)生小的回收(MinorGC),減少CPU占用時(shí)間,Web器線(xiàn)程池的設(shè)置以及Linux作系統(tǒng)的內(nèi)核參數(shù)設(shè)置不合理也有可能導(dǎo)致系統(tǒng)性能產(chǎn)品的用戶(hù)量是瞬息萬(wàn)變的,無(wú)論我們的系統(tǒng)優(yōu)化得有多好,還是會(huì)存在承受極限,所以了保證系統(tǒng)的穩(wěn)定性,我們還需要采用一些兜底策什么是兜底策第一,限流,對(duì)系統(tǒng)的設(shè)置最大限制。這里可以參考性能測(cè)試中探底接口 。同時(shí)采取熔斷措施,友好地返回沒(méi)有成功的請(qǐng)第二,實(shí)現(xiàn)智能化橫向擴(kuò)容。智能化橫向擴(kuò)容可以保證當(dāng)量超過(guò)某一個(gè)閾值時(shí),系統(tǒng)可向擴(kuò)容大量發(fā)生在瞬間的請(qǐng)求,即使成功了,搶購(gòu)也結(jié)束了。目前很多公司使用Docker容器來(lái)部署應(yīng)用服務(wù)。這是因?yàn)镈ocker容器是使用Kubernetes為容器管理系統(tǒng),而Kubernetes以實(shí)現(xiàn)智能化橫向擴(kuò)容和提前擴(kuò)容Docker服務(wù)。性能測(cè)試分為微基準(zhǔn)性能測(cè)試和宏基準(zhǔn)性能測(cè)試,前者可以精準(zhǔn)地調(diào)優(yōu)小單元的業(yè)務(wù)功能,后者可以結(jié)合內(nèi)外因素,綜合模擬線(xiàn)上環(huán)境來(lái)測(cè)試系統(tǒng)性能。兩種方法結(jié)合,可以更立體地測(cè)試系統(tǒng)性能。可以幫助我們制定性能調(diào)優(yōu)策略,調(diào)優(yōu)方法很多,這里就不一一贅述了。但有一個(gè)共同點(diǎn)就是,調(diào)優(yōu)策略千變?nèi)f化,但思路和都是一樣的,都是從業(yè)務(wù)調(diào)優(yōu)到編程調(diào)優(yōu),再到系統(tǒng)調(diào)優(yōu)。最后,給你提個(gè)醒,任何調(diào)優(yōu)都需要結(jié)合場(chǎng)景明確已知問(wèn)題和性能目標(biāo),不能為了調(diào)優(yōu)而調(diào)優(yōu),以免引入新的Bug,帶來(lái)風(fēng)險(xiǎn)和弊端。假設(shè)你現(xiàn)在負(fù)責(zé)一個(gè)系統(tǒng),馬上就有新品上線(xiàn)了,還要有搶購(gòu)活動(dòng),那么你會(huì)將哪些功期待在留言區(qū)看到你的答案。也歡迎你點(diǎn)擊“請(qǐng)朋友讀”,把今天的內(nèi)容給身邊的朋 歸科技所有 不得售賣(mài)。頁(yè)面已增加防盜追蹤,將依 上一 01|如何制定性能調(diào)優(yōu)標(biāo)準(zhǔn)下一 03|字符串性能優(yōu)化不容小覷,百M(fèi)內(nèi)存輕松幾十G數(shù)精選留言 13、商品服、訂單服、支付務(wù)、券務(wù)等。從保證支撐購(gòu)活業(yè)余 昨夜星 4木偶笨 2 1 建 12.有沒(méi)有nginx調(diào)優(yōu)呢,因?yàn)槲覀兘o客戶(hù)部署時(shí)發(fā)現(xiàn),用阿里云的SLB和自己搭建策略可調(diào)優(yōu);另一方,我基礎(chǔ)知識(shí)及調(diào)優(yōu)思維方的重要。所以從這個(gè)專(zhuān)欄的來(lái)看,沒(méi)有專(zhuān)題專(zhuān)門(mén)講nginx的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論