java即时编译器_Java即时编译:不仅仅是一个流行词
java即時(shí)編譯器
最近的Java生產(chǎn)性能問(wèn)題迫使我重新審視并真正欣賞Java VM即時(shí)(JIT)編譯器。 大多數(shù)Java開發(fā)人員和支持人員都聽說(shuō)過(guò)這種JVM運(yùn)行時(shí)性能優(yōu)化,但是有多少人真正理解并欣賞它的好處?
本文將與您分享在添加新的虛擬服務(wù)器(容量改進(jìn)和水平擴(kuò)展項(xiàng)目)之后我所涉及的故障排除練習(xí)。
有關(guān)JIT的更深入介紹,我建議以下文章:
- ##即時(shí)編譯: http : //en.wikipedia.org/wiki/Just-in-time_compilation
- ## Java HotSpot性能引擎體系結(jié)構(gòu): http : //www.oracle.com/technetwork/java/whitepaper-135217.html
- ##了解即時(shí)編譯和優(yōu)化: http : //docs.oracle.com/cd/E15289_01/doc.40/e15058/underst_jit.htm
- ## JIT編譯器如何優(yōu)化代碼: http : //pic.dhe.ibm.com/infocenter/java7sdk/v7r0/index.jsp?topic=%2Fcom.ibm.java.zos.70.doc%2Fdiag%2Funderstanding% 2Fjit_overview.html
JIT編譯概述
JIT編譯本質(zhì)上是一個(gè)在運(yùn)行時(shí)提高Java應(yīng)用程序性能的過(guò)程。
下圖說(shuō)明了不同的JVM層和交互。 它描述了以下高層過(guò)程:
案例分析
現(xiàn)在這里是我之前提到的項(xiàng)目的背景。 主要目標(biāo)是在生產(chǎn)環(huán)境中添加新的IBM P7 AIX虛擬服務(wù)器(LPAR),以提高平臺(tái)的容量。 查找以下平臺(tái)本身的規(guī)格:
- Java EE服務(wù)器 : IBM WAS 6.1.0.37和IBM WCC 7.0.1
- 操作系統(tǒng) :AIX 6.1
- JDK :IBM J2RE 1.5.0(SR12 FP3 + IZ94331)@ 64位
- RDBMS :Oracle 10g
- 平臺(tái)類型 :中間層和批處理
為了達(dá)到現(xiàn)有的應(yīng)用程序性能水平,購(gòu)買了完全相同的硬件規(guī)格。 還使用與現(xiàn)有產(chǎn)品相同的版本安裝了AIX OS版本和其他IBM軟件。
為了確保應(yīng)用程序具有相同的性能水平,對(duì)以下各項(xiàng)(清單)均進(jìn)行了驗(yàn)證:
- 硬件規(guī)格(#CPU內(nèi)核,物理RAM,SAN…)。
- 操作系統(tǒng)版本和補(bǔ)丁程序級(jí)別; 包括AIX內(nèi)核參數(shù)。
- IBM WAS和IBM WCC版本,補(bǔ)丁程序級(jí)別; 包括調(diào)整參數(shù)。
- IBM JRE版本,補(bǔ)丁程序級(jí)別和調(diào)整參數(shù)(啟動(dòng)參數(shù), Java堆大小 ……)。
- 還正確評(píng)估了網(wǎng)絡(luò)連接性和性能。
新的生產(chǎn)服務(wù)器構(gòu)建完成后,將執(zhí)行功能測(cè)試,該測(cè)試還確認(rèn)了聯(lián)機(jī)和批處理應(yīng)用程序的正常行為。
但是,在其生產(chǎn)運(yùn)營(yíng)的第一天就發(fā)現(xiàn)了主要的性能問(wèn)題。 您將在下面找到所觀察到的性能問(wèn)題的摘要矩陣。
| 生產(chǎn)服務(wù)器 | 運(yùn)行時(shí)間 | 處理量(#個(gè)訂單) | 中央處理器 % (平均) | 中間件健康 |
| 現(xiàn)有服務(wù)器 | 10個(gè)小時(shí) | 25萬(wàn)(基準(zhǔn)) | 20% | 健康 |
| *新*服務(wù)器 | 10個(gè)小時(shí) | 5萬(wàn)-500% | 80%+ 400% | 高線程利用率 |
從上面的視圖中可以看到,性能結(jié)果在生產(chǎn)的第一天就非常災(zāi)難性。 與現(xiàn)有生產(chǎn)服務(wù)器相比,新生產(chǎn)服務(wù)器不僅處理了更少的訂單,而且物理資源利用率(例如CPU%)也要高得多。
考慮到確保新服務(wù)器的構(gòu)建與現(xiàn)有服務(wù)器完全相同所花費(fèi)的時(shí)間,這種情況令人感到困惑。 那時(shí),另一個(gè)核心團(tuán)隊(duì)參與進(jìn)來(lái),以執(zhí)行額外的故障排除并確定性能問(wèn)題的根源。
故障排除:尋找罪魁禍?zhǔn)住?/h2>
故障排除團(tuán)隊(duì)分為兩部分,以專注于以下項(xiàng)目:
- 從IBM WAS容器中識(shí)別CPU%的來(lái)源,并將CPU占用空間與現(xiàn)有生產(chǎn)服務(wù)器進(jìn)行比較。
- 在現(xiàn)有生產(chǎn)服務(wù)器和新生產(chǎn)服務(wù)器之間執(zhí)行更多數(shù)據(jù)和文件比較。
為了了解CPU%的來(lái)源,我們確實(shí)從運(yùn)行IBM WAS和IBM WCC的IBM JVM中對(duì)每個(gè)線程執(zhí)行了AIX CPU分析 。 從下面的屏幕快照中可以看到,發(fā)現(xiàn)許多線程各自使用5-20%。 在現(xiàn)有生產(chǎn)服務(wù)器上執(zhí)行的相同分析確實(shí)顯示出更少的線程數(shù)量,CPU占用率始終在5%左右。
結(jié)論:
相同類型的業(yè)務(wù)流程使用的CPU是現(xiàn)有生產(chǎn)服務(wù)器的3-4倍。
為了了解執(zhí)行的處理類型,每個(gè)線程數(shù)據(jù)在CPU的同時(shí)捕獲了JVM線程轉(zhuǎn)儲(chǔ) 。 現(xiàn)在,在查看了JVM線程轉(zhuǎn)儲(chǔ)(Java內(nèi)核)之后,我們意識(shí)到的第一件事是確實(shí)禁用了JIT! 通過(guò)從正在運(yùn)行的JVM進(jìn)程中運(yùn)行java –version命令也可以確認(rèn)該問(wèn)題。
這個(gè)發(fā)現(xiàn)非常重要,特別是考慮到在現(xiàn)有生產(chǎn)服務(wù)器上啟用了JIT。 大約在同一時(shí)間,負(fù)責(zé)比較服務(wù)器的另一個(gè)團(tuán)隊(duì)確實(shí)發(fā)現(xiàn)了用于啟動(dòng)應(yīng)用程序的AIX用戶的環(huán)境變量之間的差異。 早期的差距分析忽略了這種比較練習(xí)。 他們發(fā)現(xiàn)新的AIX生產(chǎn)服務(wù)器具有以下額外條目:
JAVA_COMPILER=NONE根據(jù)IBM文檔 ,添加此類環(huán)境變量是禁用 JIT的方法之一。
復(fù)雜的根本原因分析,簡(jiǎn)單的解決方案
為了了解在我們的環(huán)境中禁用JIT的影響,您必須了解其含義。 禁用JIT本質(zhì)上意味著整個(gè)JVM現(xiàn)在都在解釋模式下運(yùn)行。 對(duì)于我們的應(yīng)用程序,以完全解釋模式運(yùn)行不僅會(huì)大大降低應(yīng)用程序的吞吐量,而且還會(huì)增加服務(wù)器CPU利用率的壓力點(diǎn),因?yàn)槊總€(gè)請(qǐng)求/線程占用的CPU數(shù)量是使用JIT執(zhí)行的請(qǐng)求的3-4倍(請(qǐng)記住,當(dāng)使用JIT時(shí)啟用后,JVM將直接對(duì)機(jī)器/本機(jī)代碼執(zhí)行許多調(diào)用)。
如預(yù)期的那樣,刪除此環(huán)境變量以及重新啟動(dòng)受影響的JVM進(jìn)程確實(shí)解決了問(wèn)題并恢復(fù)了性能級(jí)別。
評(píng)估您的應(yīng)用程序的JIT收益
我希望您對(duì)這個(gè)案例研究和對(duì)JVM JIT編譯過(guò)程的簡(jiǎn)短回顧表示贊賞。 為了了解不對(duì)Java應(yīng)用程序使用JIT的影響,建議您進(jìn)行以下實(shí)驗(yàn):
- 在啟用了JIT的情況下為您的應(yīng)用程序生成負(fù)載,并捕獲一些基準(zhǔn)數(shù)據(jù),例如CPU%,響應(yīng)時(shí)間,#個(gè)請(qǐng)求等。
- 禁用JIT。
- 重做相同的測(cè)試并比較結(jié)果。
翻譯自: https://www.javacodegeeks.com/2013/07/java-just-in-time-compilation-more-than-just-a-buzzword.html
java即時(shí)編譯器
總結(jié)
以上是生活随笔為你收集整理的java即时编译器_Java即时编译:不仅仅是一个流行词的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 吉利控股:有关“在印尼投资建厂”报道很不
- 下一篇: 夸人有范儿是什么意思 夸人有范儿的含义