![優(yōu)化Java堆大小的5個技巧_第1頁](http://file4.renrendoc.com/view12/M03/16/00/wKhkGWZ9856AazbeAAMOrC7axOU169.jpg)
![優(yōu)化Java堆大小的5個技巧_第2頁](http://file4.renrendoc.com/view12/M03/16/00/wKhkGWZ9856AazbeAAMOrC7axOU1692.jpg)
![優(yōu)化Java堆大小的5個技巧_第3頁](http://file4.renrendoc.com/view12/M03/16/00/wKhkGWZ9856AazbeAAMOrC7axOU1693.jpg)
![優(yōu)化Java堆大小的5個技巧_第4頁](http://file4.renrendoc.com/view12/M03/16/00/wKhkGWZ9856AazbeAAMOrC7axOU1694.jpg)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
/優(yōu)化Java堆大小的5個技巧摘要:Java堆容量不足可以對性能造成很大影響,這樣無疑就給程序帶來不可必要的麻煩,本文總結(jié)了影響Java堆容量不足的五大原因以及巧妙地去優(yōu)化?本文作者Pierre是一名有10多年經(jīng)驗的高級系統(tǒng)架構(gòu)師,他的主要專業(yè)領(lǐng)域是JavaEE、中間件和JVM技術(shù)。根據(jù)他多年的工作實踐經(jīng)驗,他發(fā)現(xiàn)許多性能問題都是由Java堆容量不足和調(diào)優(yōu)引起的。下面他將和大家分享非常實用的5個Java堆優(yōu)化技巧。資料個人收集整理,勿做商業(yè)用途1.JVM:對難以理解的東西產(chǎn)生恐懼感千萬不要以為,通過配置,調(diào)優(yōu),就可以排除那些你所不明白的問題。有些人認(rèn)為Java程序員不需要知道內(nèi)部JVM內(nèi)存管理。毫無疑問,這種觀點明顯是錯誤的,如果想拓寬知識面和提升排除故障能力,你就必須要了解和學(xué)習(xí)一下JVM內(nèi)存管理。資料個人收集整理,勿做商業(yè)用途對于Java或者是JavaEE新手來說,JavaHeap調(diào)優(yōu)和故障排除是一項非常有挑戰(zhàn)的工作。下面會提供一些典型的案例場景:資料個人收集整理,勿做商業(yè)用途客戶端環(huán)境面臨著有規(guī)律的OutOfMemoryError錯誤并且對業(yè)務(wù)造成了很大的影響。你的開發(fā)團(tuán)隊要在如此大的壓力下去解決這個問題,通常會怎么做?用谷歌搜索引擎找到類似的問題并且你會相信(或假設(shè))你也面臨同樣的問題。你會抓住JVM-Xms和存在OutOfMemoryError異常這幾個關(guān)鍵字的例子,然后希望通過這樣的案例來快速解決客戶端問題。資料個人收集整理,勿做商業(yè)用途最后你會在你環(huán)境中使用相同的調(diào)優(yōu)方法。兩天后,問題仍然發(fā)生(甚至更糟或者稍微好點)……到底是哪里錯了呢?首先,沒有摸清問題根源所在?對開發(fā)環(huán)境沒有正確地進(jìn)行深層面(規(guī)格、負(fù)載情況等)理解。網(wǎng)絡(luò)搜索是一個非常優(yōu)秀的學(xué)習(xí)方法和知識分享工具,但是你必須結(jié)合自己的實際項目,從根本上進(jìn)行分析解決。資料個人收集整理,勿做商業(yè)用途可能缺乏基本的JVM和JVM內(nèi)存管理技能,阻止你把所有的點給連接起來。今天講的第一條技巧是幫助你理解基本的JVM原則及其與眾不同的內(nèi)存空間。這些知識都是相當(dāng)重要的,它可以幫助你做出有效的調(diào)優(yōu)策略、更加正確合理的預(yù)測將來會產(chǎn)生的影響、提前知道未來需要做哪些調(diào)優(yōu)工作。下面來看一下JVM參考指南:資料個人收集整理,勿做商業(yè)用途JVM內(nèi)存分為3個內(nèi)存空間JavaHeap:適用于所有的JVM廠商,通常用來拆分YoungGen(幼苗)和OldGen(終身享用)空間。資料個人收集整理,勿做商業(yè)用途PermGen(永久代):適用于SunHotSpotVM((PermGen空間在Java7或者Java8更新中將會被刪除)資料個人收集整理,勿做商業(yè)用途NativeHeap(C-Heap):適用于所有的JVM廠商。建議把下面的文章都能看一遍,最好把Sun的Java內(nèi)存管理白皮書和OpenJDKS實現(xiàn)下載下來并仔細(xì)閱讀。資料個人收集整理,勿做商業(yè)用途SunHotSpotVM資料個人收集整理,勿做商業(yè)用途IBMVM資料個人收集整理,勿做商業(yè)用途OracleJRockitVM資料個人收集整理,勿做商業(yè)用途Sun(Oracle)–Javamemorymanagementwhitepaper資料個人收集整理,勿做商業(yè)用途OpenJDK–Open-sourceJavaimplementation資料個人收集整理,勿做商業(yè)用途正如你所看到的,JVM內(nèi)存管理比使用Xmx設(shè)置最大值更為復(fù)雜。你需要查看每個角度,包括本地和PermGen需求以及從主機(jī)上查看物理內(nèi)存可用性(CPUcore)。資料個人收集整理,勿做商業(yè)用途在較大的JavaHeap和較小的本地Heap比賽中,32位虛擬機(jī)可能會變得相當(dāng)棘手。試圖在一個32位VM如2.5GB+上設(shè)置一個大型堆,根據(jù)應(yīng)用程序占用和線程數(shù)量等因素會增加OutOfMemoryError這個異常拋出。64位JVM可以解決這個問題,但物理資源可用性和垃圾回收成本仍然是有限制的(成本主要集中在GC大小收集上)。最大并不表示是最好的,所以請不要假設(shè)在一個16GB的64位虛擬機(jī)上可以運行20個JavaEE應(yīng)用程序。資料個人收集整理,勿做商業(yè)用途2.數(shù)據(jù)和應(yīng)用程序為王:回顧靜態(tài)占用需求應(yīng)用程序以及相關(guān)數(shù)據(jù)將決定Java堆空間占用需求。通過靜態(tài)內(nèi)存,可“預(yù)測”下面的內(nèi)存需求:確定將會有多少不同的應(yīng)用程序部署到預(yù)先計劃的一個單獨的JVM進(jìn)程上,例如有多少個ear文件、war文件、jar文件等。在一個JVM上部署的應(yīng)用程序越多,對本機(jī)堆的需求就越多。資料個人收集整理,勿做商業(yè)用途確定有多少個類需要在運行時加載:包括第三方API。越多的類加載器和類在運行時被加載,在HotSpotVMPermGen空間和內(nèi)部JIT相關(guān)優(yōu)化對象上的需求就越高。資料個人收集整理,勿做商業(yè)用途確定數(shù)據(jù)緩存占用,如應(yīng)用程序加載內(nèi)部緩存數(shù)據(jù)結(jié)構(gòu)(和第三方API),例如數(shù)據(jù)庫中的數(shù)據(jù)緩存,從文件中讀取數(shù)據(jù)等。數(shù)據(jù)緩存使用越多,JavaHeapOldGen空間需求就越高。資料個人收集整理,勿做商業(yè)用途確定允許建立的中間件線程數(shù)量。這是非常重要的,因為Java線程需要足夠的本機(jī)內(nèi)存,否則會拋OutOfMemoryError異常。資料個人收集整理,勿做商業(yè)用途在JVM進(jìn)程上部署的應(yīng)用程序越多,對本地內(nèi)存和PermGen空間的要求就越高。數(shù)據(jù)緩存并不是序列化為一個磁盤或數(shù)據(jù)庫,它將從OldGen空間里面需要額外的內(nèi)存。資料個人收集整理,勿做商業(yè)用途設(shè)法對靜態(tài)內(nèi)存占用進(jìn)行合理的評估,在真正進(jìn)行數(shù)據(jù)測試之前,設(shè)置一些JVM能力起點是非常有用的。對于32位JVM,通常不推薦一個Java堆大小超過2GB(-Xms2048m,-Xmx2048m),對于JavaEE應(yīng)用程序和線程來說這樣將需要足夠的內(nèi)存和本機(jī)堆PermGen。資料個人收集整理,勿做商業(yè)用途這個評估是非常重要因為太多的應(yīng)用程序部署在一個32位JVM進(jìn)程上很容易導(dǎo)致本機(jī)堆耗盡;尤其是在多重線程環(huán)境。資料個人收集整理,勿做商業(yè)用途對于64位JVM,一個3GB或者4GB的Java堆/JVM進(jìn)程是推薦的起點。3.業(yè)務(wù)流量設(shè)置規(guī)則:審查動態(tài)內(nèi)存占用需求業(yè)務(wù)流量通常會決定動態(tài)內(nèi)存占用。通過觀察各種監(jiān)控工具可以發(fā)現(xiàn)并發(fā)用戶與請求生成的JVMGC“心跳”,這是由于頻繁的創(chuàng)建和垃圾回收短期或者長期對象。資料個人收集整理,勿做商業(yè)用途一個典型的32位JVM,Java堆大小設(shè)置在2GB(使用分代&并發(fā)收集器)通常為500MBYoungGen分配空間和1.5GB的OldGen空間。資料個人收集整理,勿做商業(yè)用途最大限度地減少重大GC收集的頻率是獲得最佳性能的關(guān)鍵因素,所以在高峰的時候理解和評估需要多少內(nèi)存是非常重要的。資料個人收集整理,勿做商業(yè)用途再次聲明,應(yīng)用程序類型和數(shù)據(jù)將決定內(nèi)存需求。購物車的應(yīng)用程序類型(長期居住的對象)涉及大型和非序列化會話數(shù)據(jù),這個通常需要大型Java堆和很多OldGen空間。無狀態(tài)和XML處理(很多短命的對象)繁重的應(yīng)用程序需要適當(dāng)YoungGen空間,以盡量減少頻率主要集合。資料個人收集整理,勿做商業(yè)用途例如:你有5個ear應(yīng)用程序(2000多個Java類)要部署(包含中間件代碼)本地堆需求估計為1GB(必須足夠大以處理線程創(chuàng)建等等。)PermGen空間大約是512MB。內(nèi)部靜態(tài)緩存大約500MB在高峰時間,總預(yù)測流量是5000個并發(fā)用戶每個用戶的會話數(shù)據(jù)大約500K在高峰期間,總流量會話要求是2.5GB。正如你所看到的一樣,在如此情況下,32位JVM進(jìn)程就無法滿足。一個典型的解決方案是進(jìn)行流量拆分,在幾個JVM進(jìn)程或物理主機(jī)(假設(shè)有足夠的硬件和CPUcore可用)上。資料個人收集整理,勿做商業(yè)用途大多數(shù)時候,業(yè)務(wù)流量將推動內(nèi)存占用。除非你需要大量的數(shù)據(jù)緩存來實現(xiàn)適當(dāng)?shù)男阅?,典型的門戶應(yīng)用網(wǎng)站(媒體)繁重的應(yīng)用程序需求。數(shù)據(jù)緩存太多的時候應(yīng)該用一個黃色的標(biāo)志標(biāo)注一下,最好早點去重新審視一下一些設(shè)計元素。資料個人收集整理,勿做商業(yè)用途4.量體裁衣這一條,你應(yīng)該做到:理解基本的JVM原則和內(nèi)存空間。對所有應(yīng)用程序有深入的了解及其它們的特點(大小、類型、動態(tài)流量、無狀態(tài)對象VS有狀態(tài)對象、內(nèi)部內(nèi)存緩存等)。資料個人收集整理,勿做商業(yè)用途對預(yù)測業(yè)務(wù)流量(并發(fā)用戶)給每一個應(yīng)用程序能提出很好的觀點—如果你需要一個64位的虛擬內(nèi)存,那么將設(shè)置哪個作為開始。資料個人收集整理,勿做商業(yè)用途如果需要多個JVM(中間件)過程。等一下,這樣做并不足夠。雖然上面的信息是至關(guān)重要的,并且關(guān)于Java堆的設(shè)置進(jìn)行了“最佳猜測”,對應(yīng)用程序的行為進(jìn)行模擬并且進(jìn)行適當(dāng)?shù)姆治?、?fù)載和性能測試來驗證Java堆內(nèi)存要求。資料個人收集整理,勿做商業(yè)用途推薦Jprofiler工具給大家,學(xué)習(xí)如何使用一個分析器的最好方法是正確理解應(yīng)用程序的內(nèi)存占用。另一個方法是使用EclipseMAT工具根據(jù)現(xiàn)有的環(huán)境進(jìn)行堆轉(zhuǎn)儲分析。堆轉(zhuǎn)儲非常強(qiáng)大,它可以允許你查看和理解Java堆的整個內(nèi)存占用,包含類加載器相關(guān)數(shù)據(jù)和在內(nèi)存占用分析中必須要做的,特別是內(nèi)存泄漏。資料個人收集整理,勿做商業(yè)用途Java分析器和堆轉(zhuǎn)儲分析工具允許你理解和驗證應(yīng)用程序內(nèi)存足跡,包含內(nèi)存泄漏的檢測和解決方案。負(fù)載測試和性能測試是必不可少的,通過模擬并發(fā)用戶來驗證早期評估是否正確,它也會把應(yīng)用程序瓶頸暴露出來并且允許你進(jìn)行微調(diào)。推薦一個非常容易上手的工具:ApacheJmeter。資料個人收集整理,勿做商業(yè)用途最后將看一下這樣的情況,應(yīng)用程序在JavaEE環(huán)境非常正常,直到有一天完全正常的設(shè)備啟動失敗,例如硬件問題。突然的環(huán)境運行能力下降和整體環(huán)境下降,到底發(fā)生了什么?資料個人收集整理,勿做商業(yè)用途引起“多米諾效應(yīng)”的原因有很多,但缺少JVM調(diào)優(yōu)和處理故障轉(zhuǎn)移的能力(短期額外負(fù)荷)是很常見的。如果JVM進(jìn)程運行在80%+OldGen空間容量和頻繁的垃圾收集,你如何預(yù)期故障轉(zhuǎn)移場景?資料個人收集整理,勿做商業(yè)用途前面模擬的負(fù)載和性能測試應(yīng)該模擬這樣的場景,調(diào)整你的調(diào)優(yōu)設(shè)置使您的Java堆有足夠的緩沖來處理額外的負(fù)載(額外的對象)在短期內(nèi)。這主要適用于動態(tài)內(nèi)存占用,由于故障轉(zhuǎn)移意味著將重定向一些固定的并發(fā)用戶給可利用的JVM進(jìn)程(中間件實例)。資料個人收集整理,勿做商業(yè)用途5.分而治之這一條的前提是你已經(jīng)完成了幾十個負(fù)載測試。JVM已經(jīng)不存在泄露,你的應(yīng)用程序內(nèi)存不能再進(jìn)行任何減少。你已經(jīng)嘗試了幾個調(diào)優(yōu)策略,例如使用一個64位的Java堆空間在10GB以上。多個GC策略,盡管這樣,仍然沒有找到合適的可以接受的性能水平?資料個人收集整理,勿做商業(yè)用途與當(dāng)前的JVM規(guī)范相比,適當(dāng)?shù)拇怪焙退缴炜s,包括在每個物理主機(jī)和跨多個主機(jī)上建立JVM進(jìn)程來滿足整個吞吐量和容量。如果在幾個邏輯倉、自身的JVM進(jìn)程、線程和調(diào)優(yōu)值里打破應(yīng)用程序列表那么IT環(huán)境的容錯能力將更強(qiáng)大。資料個人收集整理,勿做商業(yè)用途“分而治
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年蛋撻皮合作協(xié)議書
- 2025年無機(jī)械動力飛機(jī)合作協(xié)議書
- 2025年九年級下學(xué)期語文教學(xué)工作總結(jié)標(biāo)準(zhǔn)范文(二篇)
- 2025年中山市店鋪出租合同(2篇)
- 2025年中小學(xué)走讀生安全責(zé)任協(xié)議模板(三篇)
- 2025年二年級教師心得體會例文(6篇)
- 2013-2022年北京市中考真題物理試題匯編:磁現(xiàn)象章節(jié)綜合
- 2025年個人客戶信息保密協(xié)議范文(2篇)
- 倉儲裝修終止協(xié)議樣本
- 文化產(chǎn)業(yè)基地裝修合同
- HYT 235-2018 海洋環(huán)境放射性核素監(jiān)測技術(shù)規(guī)程
- 中國香蔥行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告2024-2034版
- 消化系統(tǒng)常見疾病康復(fù)
- 婦科惡性腫瘤免疫治療中國專家共識(2023)解讀
- 2024年浪潮入職測評題和答案
- 小班數(shù)學(xué)《整理牛奶柜》課件
- 皮膚感染的護(hù)理診斷與護(hù)理措施
- 中考語文真題雙向細(xì)目表
- 2024年江蘇省對口單招英語試卷及答案
- 藥品集采培訓(xùn)課件
- 高中物理考試成績分析報告
評論
0/150
提交評論