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

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論