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