版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)
二月23黃國慶重慶市擎天博元科技有限公司2023/2/4MetarnetTechnologiesCo.,Ltd.2JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)
主要內(nèi)容什么是JVMJVM內(nèi)存模型內(nèi)存分配垃圾回收監(jiān)控實(shí)例配置實(shí)例2023/2/4MetarnetTechnologiesCo.,Ltd.3JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)什么是JVM?基本上來說,JVM是一個虛擬運(yùn)行環(huán)境,對于字節(jié)碼來說就像是一個機(jī)器一樣,可以執(zhí)行任務(wù),并通過底層實(shí)現(xiàn)執(zhí)行內(nèi)存相關(guān)的操作。JVM使Java程序做到了“一次編寫,到處運(yùn)行”。JVM解放了程序員,使程序員不必再關(guān)系對象的生命周期,使程序員不必再關(guān)心應(yīng)該在何時釋放內(nèi)存??梢詫VM當(dāng)做是一種專為Java而生的特殊的操作系統(tǒng),它的工作是管理運(yùn)行Java應(yīng)用程序的運(yùn)行時環(huán)境。2023/2/4MetarnetTechnologiesCo.,Ltd.4JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)什么是OOM?out-of-memory系統(tǒng)無法為新線程和新對象分配空間“堆”滿了,垃圾回收不成功影響:業(yè)務(wù)宕機(jī)2023/2/4MetarnetTechnologiesCo.,Ltd.5JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)JVM內(nèi)存模型各個年代:新生代(YoungGeneration)伊甸園空間(Eden
)、幸存者空間(Survivor
)最新被創(chuàng)建的對象會被分配到這里,由于大部分對象在創(chuàng)建后會很快變得不可到達(dá),所以很多對象被創(chuàng)建在新生代,然后消失。老年代(OldGeneration)對象沒有變得不可達(dá),并且從新生代中存活下來,會被拷貝到這里。持久代(PermanentGeneration)也被稱為方法區(qū)(methodarea)。他用來保存類常量以及字符串常量。先理解養(yǎng)魚專業(yè)戶的“漁池”?
2023/2/4MetarnetTechnologiesCo.,Ltd.6JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)JVM內(nèi)存模型每個空間的執(zhí)行順序如下:絕大多數(shù)剛剛被創(chuàng)建的對象會存放在伊甸園空間。在伊甸園空間執(zhí)行了第一次GC之后,存活的對象被移動到其中一個幸存者空間。
此后,在伊甸園空間執(zhí)行GC之后,存活的對象會被堆積在同一個幸存者空間。
當(dāng)一個幸存者空間飽和,還在存活的對象會被移動到另一個幸存者空間。之后會清空已經(jīng)飽和的那個幸存者空間。在以上的步驟中重復(fù)幾次依然存活的對象,就會被移動到老年代。2023/2/4MetarnetTechnologiesCo.,Ltd.7JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)JVM內(nèi)存模型垃圾回收(GC)是旨在釋放不可達(dá)Java對象所占用的內(nèi)存的過程,是Javavirtualmachine(JVM)中動態(tài)內(nèi)存管理系統(tǒng)的核心組成部分。在一個典型的垃圾回收周期中,所有仍被引用的對象,即可達(dá)對象,會被保留。沒有被引用的Java對象所占用的內(nèi)存會被釋放并回收,以便分配給新創(chuàng)建的對象。發(fā)生在新生代的對象的消失:minorGC(局部垃圾回收)發(fā)生在老年代的對象的消失:majorGC(完全垃圾回收)2023/2/4MetarnetTechnologiesCo.,Ltd.8JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)內(nèi)存分配當(dāng)你在啟動Java應(yīng)用程序時指定了啟動參數(shù)_-Xmx_(例如,java-Xmx2gMyApp),則相應(yīng)大小的內(nèi)存會被分配給Java進(jìn)程。這塊內(nèi)存即所謂的*Java堆*(或簡稱為*堆*)。這塊專用的內(nèi)存地址空間用于存儲Java應(yīng)用程序所創(chuàng)建的對象。隨著Java應(yīng)用程序的運(yùn)行,會不斷的創(chuàng)建新對象并為之分配內(nèi)存,Java堆(即地址空間)會逐漸被填滿。32位與64位的區(qū)別32位JVM最大堆為1.5G64位JVM最大堆為操作系統(tǒng)中內(nèi)存可使用空間大小2023/2/4MetarnetTechnologiesCo.,Ltd.9JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)垃圾回收minorGCmajorGC目標(biāo)快速釋放不可達(dá)對象所占用的內(nèi)存,防止應(yīng)用程序出現(xiàn)OOM錯誤?;厥諆?nèi)存時,對應(yīng)用程序的性能(指延遲和吞吐量)的影響要盡可能小原則JVM堆不是越大越好(堆越大GC時間越長)不是每個應(yīng)用程序的JVM配置均可以一樣(應(yīng)用規(guī)模、結(jié)構(gòu)和響應(yīng)要求不一樣)調(diào)優(yōu)的操作是循序漸進(jìn)的(摸著石頭過河)2023/2/4MetarnetTechnologiesCo.,Ltd.10JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM監(jiān)控工具命令行:jstat(關(guān)注GC的次數(shù)和GC所耗時間)jmap(將內(nèi)存堆印象保存為文件)HeapAnalyzer(分析jmap保存的文件)圖形化JconsoleVisualVM2023/2/4MetarnetTechnologiesCo.,Ltd.11JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM監(jiān)控工具示例jstat–gc$vmid$1000(vmid是java應(yīng)用的進(jìn)程id號,1000:每隔一秒展示GC監(jiān)控數(shù)據(jù))從上圖中可計算得到以下值:年青代GC發(fā)生了1989次(YGCT),共耗費(fèi)了41.001秒(YGC),故年青代每次GC的時間為:41.001/1989=0.020秒完全GC發(fā)生了1次(FGCT),共耗費(fèi)了0.971秒(FGC),故完全GC每次GC的時間為:0.971/1=0.971秒一般性能較好的判斷:年青代GC耗時在50~100毫秒以內(nèi),完全GC小于1秒以內(nèi)為很好的性能。(因?yàn)镚C均會影響系統(tǒng)訪問)2023/2/4MetarnetTechnologiesCo.,Ltd.12JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM監(jiān)控工具示例jmap
-dump:format=b,file=testjvm.dump
$vmid$(vmid是java應(yīng)用的進(jìn)程id號,file:java堆內(nèi)存數(shù)據(jù)保存為文件的名稱)以上的命令可以將當(dāng)前JAVA內(nèi)存堆保存為文件,便于進(jìn)一步進(jìn)行分析。特別注意:
進(jìn)行此工作的時候,應(yīng)用訪問可能會中斷。所以不應(yīng)該在業(yè)務(wù)運(yùn)行狀態(tài)下操作此命令。2023/2/4MetarnetTechnologiesCo.,Ltd.13JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM分析工具示例HeapAnalyzer命令行:java-Xmx800m-jarha395.jar(注意:-Xmx800m是指定工具所需的java堆大小,此值要大于分析文件的尺寸大小,如果啟動過程中發(fā)現(xiàn)控制臺有java.lang.OutOfMemoryError出現(xiàn),可以適當(dāng)加大上面的數(shù)字800,給予更多的空間。ha395.jar中的文件名稱按實(shí)際下載解壓后的文件名為準(zhǔn))2023/2/4MetarnetTechnologiesCo.,Ltd.14JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM監(jiān)控工具示例
HeapAnalyzer輸出的內(nèi)容:以下表內(nèi)容即顯示當(dāng)前系統(tǒng)中出現(xiàn)泄漏的對象(flex/messaging/messages/AsyncMessage)及占用內(nèi)存的大小。LeakSizeTotalSizeSizeAnalysisNameNo.ChildNo.ParentAddress16199787316199787387Responsiblefor161,997,873bytes(61.14%)ofJavaheapContains2instancesofthefollowingleaksuspects:-arrayof[Ljava/lang/Object;holding61,312,817bytesat0x1a076af0-arrayof[Ljava/lang/Object;holding66,644,382bytesat0x12e5fc68flex/messaging/MessageClient1040xb53e1e866644382666443826972866,644,382bytes(25.15%)ofJavaheapisusedby13,321instancesofflex/messaging/messages/AsyncMessage-Containedunderflex/messaging/MessageClientholding161,997,873bytesat0xb53e1e8arrayof[Ljava/lang/Object;1332110x12e5fc686400692364006923064,006,923bytes(24.16%)ofJavaheapisusedby46,275instancesofbyte[]byte[](61MB/24.2%)000x0613128176131281721661,312,817bytes(23.14%)ofJavaheapisusedby54instancesofflex/messaging/SessionMetricsTrackerContains3instancesofthefollowingleaksuspects:-arrayof[Ljava/lang/Object;holding15,550,384bytesat0x15c5f748-arrayof[Ljava/lang/Object;holding31,137,630bytesat0x179d3ff8-arrayof[Ljava/lang/Object;holding14,608,060bytesat0x167c6918-Containedunderflex/messaging/MessageClientholding161,997,873bytesat0xb53e1e8arrayof[Ljava/lang/Object;5410x1a076af031137630311376303098831,137,630bytes(11.75%)ofJavaheapisusedby6,212instancesofflex/messaging/messages/AsyncMessage-Containedunderarrayof[Ljava/lang/Object;holding61,312,817bytesat0x1a076af0arrayof[Ljava/lang/Object;621210x179d3ff815550384155503841376815,550,384bytes(5.87%)ofJavaheapisusedby3,108instancesofflex/messaging/messages/AsyncMessage-Containedunderarrayof[Ljava/lang/Object;holding61,312,817bytesat0x1a076af0arrayof[Ljava/lang/Object;310810x15c5f74814608060146080603098814,608,060bytes(5.51%)ofJavaheapisusedby5,894instancesofflex/messaging/messages/AsyncMessage-Containedunderarrayof[Ljava/lang/Object;holding61,312,817bytesat0x1a076af0arrayof[Ljava/lang/Object;589410x167c69181213937612139376012,139,376bytes(4.58%)ofJavaheapisusedby14,365instancesofint[]int[](11.6MB/4.6%)000x02023/2/4MetarnetTechnologiesCo.,Ltd.15JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM監(jiān)控工具示例Jconsole命令行:jconsole.exeserver_IP:7080(注意:Server_IP為運(yùn)行java程序的服務(wù)器IP,7080為專門為jconsole遠(yuǎn)程連接而配置開通的JMX端口。以下為Windows平臺下配置方法:setJAVA_OPTS=%JAVA_OPTS%-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.port=7080-Dcom.sun.management.jmxremote)2023/2/4MetarnetTechnologiesCo.,Ltd.16JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM監(jiān)控工具示例visualVMJDK1.6以上版本免費(fèi)提供,服務(wù)器上相應(yīng)配置與Jconsole連接時一樣(注意:Server_IP為運(yùn)行java程序的服務(wù)器IP,7080為專門為jconsole遠(yuǎn)程連接而配置開通的JMX端口。提示:如visualVM在JAVA程序本機(jī)運(yùn)行,可以直接運(yùn)行監(jiān)控到,不需對JMX端口進(jìn)行設(shè)置)2023/2/4MetarnetTechnologiesCo.,Ltd.17JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM監(jiān)控工具示例2023/2/4MetarnetTechnologiesCo.,Ltd.18JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)監(jiān)控實(shí)例JVM監(jiān)控工具示例2023/2/4MetarnetTechnologiesCo.,Ltd.19JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)配置實(shí)例Jconsole監(jiān)控,HeapDump分析實(shí)例
通過以下jconsole監(jiān)控截圖,我們發(fā)現(xiàn)應(yīng)用服務(wù)器的堆內(nèi)存一直在上升。雖然有定時的GC操作(內(nèi)存回收),但整體趨勢仍然是一個斜坡上行的過程。2023/2/4MetarnetTechnologiesCo.,Ltd.20JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)配置實(shí)例Jconsole監(jiān)控,HeapDump分析實(shí)例
通過以下jconsole監(jiān)控截圖,我們發(fā)現(xiàn)應(yīng)用服務(wù)器的堆內(nèi)存已經(jīng)占用完,年青代和老年代均沒有可進(jìn)行再分配的空間了,此時執(zhí)行GC也不能成功。當(dāng)前應(yīng)用的狀態(tài)就是無法訪問了。
再通過其GC時間可看到,Copy(即年青代回收)平均每次為1*60/18646=0.0032秒,沒有問題;FullGC為4680秒(1小時18分鐘)/2304=2.03秒。由此可以看出,F(xiàn)ullGC占用了大量時間和次數(shù),但仍然無法將內(nèi)存清理出來。證明內(nèi)存中的某些對象未被成功釋放,需要繼續(xù)分析。2023/2/4MetarnetTechnologiesCo.,Ltd.21JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)配置實(shí)例Jconsole監(jiān)控,HeapDump分析實(shí)例通過heapdump分析工具,發(fā)現(xiàn)系統(tǒng)中已經(jīng)有非常多的flex/messaging/messages/AsyncMessage實(shí)例占用了大部分的內(nèi)存。由此即定位了是哪個實(shí)例出現(xiàn)問題,可以聯(lián)系開發(fā)人員進(jìn)行配合檢查了。2023/2/4MetarnetTechnologiesCo.,Ltd.22JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)配置實(shí)例
通過開發(fā)人員分析檢查,確認(rèn)flex的消息對象默認(rèn)沒有設(shè)置其失效時間,建立的對象將永遠(yuǎn)不會失效,故就會造成對象不停的建立,直到內(nèi)存溢出。故修改其配置文件,設(shè)置相關(guān)對象失效時間,達(dá)到JAVA可以回收其占用的內(nèi)存空間,如下:<destinationid="chat"><properties><network><subscription-timeout-minutes>30</subscription-timeout-minutes>
</network><server> <message-time-to-live>10000</message-time-to-live> <allow-subtopics>true</allow-subtopics> <subtopic-separator>.</subtopic-separator></server></properties><channels> <channelref="my-polling-amf"/></channels></destination>2023/2/4MetarnetTechnologiesCo.,Ltd.23JVM內(nèi)存監(jiān)控及性能調(diào)優(yōu)配置實(shí)例JVM參數(shù)介紹以下配置為針對一個特定的應(yīng)用環(huán)境進(jìn)行的配置:-Xmx4096m最大JAVA堆4G-Xms4096m初始化JAVA堆4G,一般服務(wù)器上均設(shè)置為最大一樣-Xmn1536M年青代堆設(shè)置值1.5G-XX:SurvivorRatio=10年青代中Eden區(qū)與Survivor區(qū)的比例-XX:PermSize=25
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 呼蘭九上期中-數(shù)學(xué)試卷答案
- 2023-2024學(xué)年湖南省婁底市八年級(上)課堂訓(xùn)練數(shù)學(xué)試卷(一)
- 蘇教版八年級生物上冊第5單元生物的多樣性第十四章豐富多彩的生物世界第二節(jié)第1課時無脊椎動物課件
- 企業(yè)倫理學(xué)(原書第5版) 課件 第4章 企業(yè)文化-影響和啟示
- 車工技能綜合實(shí)訓(xùn)(高職機(jī)電專業(yè))完整全套教學(xué)課件
- 化 學(xué)原子核外電子的排布 離子同步訓(xùn)練-2024-2025學(xué)年九年級化學(xué)人教版上冊
- 寒窗不負(fù)青云志 金榜題名會有時 課件-2024-2025學(xué)年高一上學(xué)期期中考試動員主題班會
- 【+高+中語文】《百年孤獨(dú)(節(jié)選)》課件++統(tǒng)編版高中語文選擇性必修上冊
- 草場續(xù)租合同模板
- 駐廠保潔服務(wù)合同模板
- 變電站安裝工程質(zhì)量通病及處理措施
- 建筑工地有限空間作業(yè)臺賬范本
- 2022年版《義務(wù)教育勞動課程標(biāo)準(zhǔn)》解讀與全文課件
- 學(xué)前兒童發(fā)展心理學(xué)之想象概述介紹課件
- 12.2.2全等三角形的判定SAS
- 便秘患者生活質(zhì)量(PAC-QOL)
- 獎牌投標(biāo)方案
- 青山處處埋忠骨 教案
- 投標(biāo)書服裝范文
- 3.6《推動社會發(fā)展的印刷術(shù)》課件
- 《百合花》《哦香雪》聯(lián)讀+探究詩化特征
評論
0/150
提交評論