在實(shí)時(shí)應(yīng)用程序無(wú)法滿足非功能性要求(例如性能、吞吐量和響應(yīng)時(shí)間)時(shí)對(duì)其進(jìn)行故障排除?這就是為什么每個(gè) DevOps 團(tuán)隊(duì)都應(yīng)該有一個(gè)明確的 Java 性能優(yōu)化策略來(lái)幫助識(shí)別和解決 JVM 性能問(wèn)題。想深入了解學(xué)習(xí)java的同學(xué)可以考慮參加java培訓(xùn),有系統(tǒng)規(guī)范的課程和明確清晰的學(xué)習(xí)路線,讓你快速掌握java更多知識(shí)和技能。
但是,在你說(shuō)你遇到了 Java 性能問(wèn)題之前,你必須首先確認(rèn)你不希望你的應(yīng)用程序的性能超出系統(tǒng)的最大容量。你當(dāng)前的硬件實(shí)際上可以實(shí)現(xiàn)什么類型的性能?如果你的 JVM 性能目標(biāo)超出了底層服務(wù)器的能力,那么 Java 代碼優(yōu)化將毫無(wú)用處。
系統(tǒng)容量基準(zhǔn)
開(kāi)發(fā)人員不太可能知道托管其應(yīng)用程序的服務(wù)器的確切性能。但是你通??梢哉业脚c你在生產(chǎn)中使用的系統(tǒng)相似的系統(tǒng)的已發(fā)布基準(zhǔn)。
找出你自己的服務(wù)器落在該范圍內(nèi)的哪個(gè)位置,并查看你的生產(chǎn)系統(tǒng)與已建立的性能基準(zhǔn)有多接近。如果你的應(yīng)用程序執(zhí)行低于既定基準(zhǔn),Java 性能優(yōu)化是可能的。盡管如此,僅僅因?yàn)榭梢詢?yōu)化并不一定意味著你應(yīng)該這樣做。
JVM 性能目標(biāo)
在 Java 性能優(yōu)化上投入時(shí)間的觸發(fā)因素不是你是否充分利用每個(gè)時(shí)鐘周期的滴答聲,相反,看看你是否能夠達(dá)到績(jī)效目標(biāo)。DevOps 團(tuán)隊(duì)不應(yīng)該把時(shí)間花在充分利用每個(gè)時(shí)鐘周期滴答聲上。僅當(dāng)你當(dāng)前的性能目標(biāo)未達(dá)到時(shí),你才應(yīng)該投資于Java 性能優(yōu)化。在java培訓(xùn)中,有很多關(guān)于Java 性能優(yōu)化的課程知識(shí),你還能在實(shí)操項(xiàng)目中進(jìn)行更深入的學(xué)習(xí)。
每個(gè)應(yīng)用程序都應(yīng)該有明確的性能基準(zhǔn),最長(zhǎng)可接受的響應(yīng)時(shí)間是多少?每秒應(yīng)該處理多少事務(wù)?應(yīng)用程序必須能夠處理的最大吞吐量是多少?
應(yīng)用程序的性能宣言可能包括如下語(yǔ)句:
該應(yīng)用程序?qū)⒅С置棵?500 個(gè)事務(wù)。
頁(yè)面加載時(shí)間將少于兩秒。
故障轉(zhuǎn)移在不到五秒的時(shí)間內(nèi)發(fā)生。
99% 的事務(wù)發(fā)生在不到 40 毫秒 (ms) 的時(shí)間內(nèi)。
無(wú)狀態(tài)響應(yīng)時(shí)間平均為 50 毫秒。
有狀態(tài)的響應(yīng)時(shí)間平均為 500 毫秒。
Java CPU 使用率不會(huì)超過(guò)連續(xù)兩分鐘超過(guò) 50% 的使用率。
如果你的應(yīng)用程序的性能低于系統(tǒng)的既定基準(zhǔn),并且你的性能基準(zhǔn)處于被破壞的危險(xiǎn)之中,那么你可以開(kāi)始調(diào)查如何優(yōu)化 Java 性能。
Java 性能優(yōu)化指南
大多數(shù) Java 性能問(wèn)題可歸因于以下四種共享資源之一:中央處理器、記憶、輸入輸出操作、線程。
Java 分析器(例如 Java Flight Recorder)可以幫助立即識(shí)別應(yīng)用程序中的瓶頸。使用 Java Mission Control 調(diào)查飛行記錄,特別注意以下指標(biāo):CPU 利用率、系統(tǒng)上下文切換、物理內(nèi)存利用率、隨時(shí)間的堆消耗、使用的網(wǎng)絡(luò)帶寬、磁盤 I/O 延遲、數(shù)據(jù)庫(kù)鎖、SQL 延遲、垃圾收集頻率、垃圾收集暫停時(shí)間、線程爭(zhēng)用、線程暫停、線程鎖。想要掌握java更多知識(shí)和技能,可以參加java培訓(xùn),有專業(yè)老師的指導(dǎo),你會(huì)學(xué)得更快更有效。
Java 性能優(yōu)化目標(biāo)
一旦你知道哪個(gè)共享資源會(huì)導(dǎo)致 JVM 性能問(wèn)題,請(qǐng)檢查堆棧跟蹤以在性能問(wèn)題發(fā)生時(shí)識(shí)別活動(dòng)的 Java 類和方法。百分之八十的情況下,當(dāng)你執(zhí)行以下操作時(shí),可以實(shí)現(xiàn) Java 性能優(yōu)化:
使用更快的數(shù)據(jù)庫(kù)查詢;
識(shí)別并修復(fù)內(nèi)存泄漏;
優(yōu)化垃圾收集程序;
解決線程鎖和并發(fā)問(wèn)題;
修復(fù)應(yīng)用程序中低效的代碼;
使用正確的集合類進(jìn)行列表處理。
一旦你確定了導(dǎo)致性能下降的軟件組件,就由開(kāi)發(fā)團(tuán)隊(duì)來(lái)確定 Java 代碼優(yōu)化任務(wù)的優(yōu)先級(jí)。
代碼更改、錯(cuò)誤修復(fù)、迭代更新和性能測(cè)試?yán)套罱K會(huì)產(chǎn)生一個(gè)性能補(bǔ)丁,該補(bǔ)丁將修復(fù)瓶頸、優(yōu)化應(yīng)用程序并使 JVM 性能重新符合你組織的既定目標(biāo)。
解決性能問(wèn)題從來(lái)都不是一項(xiàng)有趣的任務(wù)。但是,有了有效的 Java 性能優(yōu)化指南,注意什么是可能的,性能目標(biāo)是什么,并著眼于當(dāng)瓶頸出現(xiàn)時(shí)如何識(shí)別瓶頸,Java 性能優(yōu)化的工作變得容易得多。通過(guò)參加java培訓(xùn),學(xué)習(xí)最新java技能,可以讓你的實(shí)力一直保持領(lǐng)先水平,提升行業(yè)競(jìng)爭(zhēng)力。