性能參考指標(biāo):
創(chuàng)新互聯(lián)主營烏蘭網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,烏蘭h5成都小程序開發(fā)搭建,烏蘭網(wǎng)站營銷推廣歡迎烏蘭等地區(qū)企業(yè)咨詢執(zhí)行時(shí)間: 程序從開始到結(jié)束的執(zhí)行時(shí)間。
CPU時(shí)間: 函數(shù)或者線程占用的cpu時(shí)間。
內(nèi)存分配: 程序運(yùn)行期間所占內(nèi)存。
磁盤吞吐量: 硬盤I/O使用情況。
網(wǎng)絡(luò)吞吐量: 網(wǎng)絡(luò)使用情況。
響應(yīng)時(shí)間:用戶行為做出的響應(yīng)時(shí)間,越短性能越好。
短板原理:
一直木桶能裝多少水取決于桶壁最短的那個(gè)木板。
產(chǎn)生短板的資源有:
磁盤I/O:很多應(yīng)用大部分瓶頸在硬盤的I/O,硬盤比內(nèi)存慢很多。如果等待磁盤讀寫完成會(huì)浪費(fèi)大量CPU時(shí)間,拖累整個(gè)系統(tǒng)。
網(wǎng)絡(luò)請(qǐng)求:由于網(wǎng)絡(luò)不穩(wěn)定或擁塞控制等都會(huì)降低網(wǎng)絡(luò)請(qǐng)求效率,如果等待網(wǎng)絡(luò)請(qǐng)求結(jié)束或者超時(shí)時(shí)間設(shè)置過長會(huì)浪費(fèi)大量CPU時(shí)間,拖累整個(gè)系統(tǒng)。
CPU:一些運(yùn)算對(duì)CPU直接或者不間斷占用很大,CPU密集型應(yīng)用會(huì)在CPU上產(chǎn)生瓶頸。
程序異常:對(duì)于java應(yīng)用,異常產(chǎn)生構(gòu)造異常棧并加以處理是很耗費(fèi)資源的,高頻率出現(xiàn)異常會(huì)拖垮整個(gè)系統(tǒng)。
數(shù)據(jù)庫:關(guān)系型數(shù)據(jù)庫在存盤讀盤操作(即磁盤I/O操作),更新索引、鎖等待和競(jìng)爭(zhēng)都會(huì)產(chǎn)生瓶頸。
鎖競(jìng)爭(zhēng):高并發(fā)應(yīng)用線程之間互相鎖的競(jìng)爭(zhēng),線程上下文切換都是很大的開銷。
內(nèi)存:內(nèi)存使用nand flash讀寫速度很快,但如果應(yīng)用程序和操作系統(tǒng)把內(nèi)存占滿,會(huì)導(dǎo)致交換分區(qū)的使用,內(nèi)存數(shù)據(jù)與硬盤交換分區(qū)交換數(shù)據(jù)會(huì)產(chǎn)生(即磁盤I/O)瓶頸。
上述瓶頸基本解決方案:
磁盤I/O:使用NIO、零拷貝、mmap映射等技術(shù),盡量異步讀寫硬盤,使用緩存和緩沖區(qū)技術(shù)。使用SSD硬盤,使用RAID技術(shù)提高寫入性能。
網(wǎng)絡(luò)請(qǐng)求:CDN或PCDN加速、緩存、合并請(qǐng)求、壓縮報(bào)文,盡量異步網(wǎng)絡(luò)請(qǐng)求(消息隊(duì)列服務(wù)、master-worker等),使用NIO。加大帶寬、升級(jí)網(wǎng)卡。
CPU:持續(xù)優(yōu)化代碼,利用好多線程或多進(jìn)程,設(shè)計(jì)合理架構(gòu),拆分業(yè)務(wù),減少單機(jī)復(fù)雜運(yùn)算,避免復(fù)雜運(yùn)算和業(yè)務(wù)請(qǐng)求摻雜在一起。
異常:處理好邊界、緩沖區(qū)等,尤其需要注意避免出現(xiàn)NullPointException,測(cè)試時(shí)間大于開發(fā)時(shí)間減少bug出現(xiàn)幾率。
數(shù)據(jù)庫:優(yōu)化sql語句,注意執(zhí)行計(jì)劃,使用緩存代替數(shù)據(jù)庫部分功能,根據(jù)情景使用合理的存儲(chǔ)引擎,注意鎖,使用連接池,使用PrepareStatment。
鎖競(jìng)爭(zhēng):盡量減少鎖競(jìng)爭(zhēng),可以使用無鎖的copy-on-write、重入鎖等技術(shù)。
內(nèi)存:優(yōu)化代碼,分析內(nèi)存占用情況,合理配置gc。增大物理內(nèi)存。
Amdahl定律:
加速比公式:加速比=優(yōu)化前耗時(shí)/優(yōu)化后耗時(shí)
Speedup ≤ 1/(F+(1-F)/N)
- Speedup:加速比
- F:串行化比重
- N:CPU數(shù)量
根據(jù)Amdahl定律,優(yōu)化的效果取決于CPU數(shù)量以及系統(tǒng)中串行化程序比重,CPU數(shù)量越多,串行比越低,優(yōu)化效果越好。
性能調(diào)優(yōu)層次
設(shè)計(jì)調(diào)優(yōu):對(duì)整體架構(gòu)進(jìn)行梳理,找出短板進(jìn)行優(yōu)化,適當(dāng)使用設(shè)計(jì)模式和以往經(jīng)驗(yàn)。詳細(xì)進(jìn)行系統(tǒng)設(shè)計(jì)。
代碼調(diào)優(yōu):熟悉基本API、第三方類庫的原理,選擇最適當(dāng)和最優(yōu)秀的算法,精簡(jiǎn)實(shí)現(xiàn),面向接口。
JVM調(diào)優(yōu):熟悉jvm內(nèi)存模型,字節(jié)碼等深層技術(shù),使用常用監(jiān)控工具如:visualVM、Jconsole等。進(jìn)行壓測(cè),調(diào)節(jié)gc和堆棧大小。
數(shù)據(jù)庫調(diào)優(yōu):對(duì)sql語句進(jìn)行調(diào)優(yōu),分析執(zhí)行計(jì)劃,對(duì)數(shù)據(jù)庫系統(tǒng)配置調(diào)優(yōu)(緩沖區(qū)、共享區(qū)、連接池等),對(duì)數(shù)據(jù)庫設(shè)計(jì)進(jìn)行調(diào)優(yōu)(冗余、索引、分庫分表、讀寫分離等)
操作系統(tǒng)調(diào)優(yōu):調(diào)節(jié)句柄數(shù)、關(guān)閉沒用服務(wù)和端口、調(diào)節(jié)共享內(nèi)存、調(diào)節(jié)交換分區(qū)大小等。
最后需要注意:不要因?yàn)閮?yōu)化而優(yōu)化!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。