最近在極客時間學(xué)習(xí)性能調(diào)優(yōu)的東西辟汰,寫個文章,做個筆記岛宦,逼自己做一些驗證台丛,也算學(xué)習(xí)有個輸出。
一砾肺、計算機(jī)的哪些資源可能成為系統(tǒng)瓶頸
-
CPU
- 代碼遞歸導(dǎo)致的無限循環(huán)挽霉;
- 正則表達(dá)式引起的回溯;
- JVM 頻繁的 FULL GC债沮;
- 以及多線程編程造成的大量上下文切換炼吴。
-
內(nèi)存
- 內(nèi)存溢出
- 內(nèi)存泄漏
磁盤IO
網(wǎng)絡(luò)
-
代碼異常
- 構(gòu)建異常棧為什么消耗系統(tǒng)性能?
數(shù)據(jù)庫
鎖競爭
二疫衩、測試-分析-調(diào)優(yōu)-
測試:
- 微基準(zhǔn)性能測試:對某個接口硅蹦,某個方法。
- 宏基準(zhǔn)性能測試:考慮測試環(huán)境闷煤,測試場景和測試目標(biāo)童芹。
- 注意問題:熱身問題(JAVA代碼的)、結(jié)果不穩(wěn)定(繪個平均曲線圖)鲤拿、多JVM情況(線上多個tomcat的情況)假褪。
-
分析:
- rt、tps近顷;
- cpu生音、內(nèi)存、網(wǎng)絡(luò)IO
- 日志窒升,jvm的gc頻率缀遍、堆內(nèi)存分配情況
- 代碼問題,數(shù)據(jù)庫等饱须,各個線程池配置等域醇。
-
調(diào)優(yōu):
- 優(yōu)化代碼
- 優(yōu)化設(shè)計
- 優(yōu)化算法
- 時間換空間
- 空間換時間
- 參數(shù)調(diào)優(yōu),jvm參數(shù)蓉媳,線程池參數(shù)
-
兜底策略
- 限流
- 橫向擴(kuò)容
- 提前擴(kuò)容