真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何回答解決OOM類問(wèn)題

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何回答解決OOM類問(wèn)題,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到福貢網(wǎng)站設(shè)計(jì)與福貢網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋福貢地區(qū)。

上次出去劃水被問(wèn)道如何快速解決線上OOM問(wèn)題,由于本人菜雞一個(gè)答不是很好,因此回來(lái)查閱資料和咨詢了一下其它大佬總結(jié)了一下。

一、為什么會(huì)OOM

主要是以下兩點(diǎn):

1、分配的內(nèi)存少了:比如虛擬機(jī)本身可使用的內(nèi)存(一般通過(guò)啟動(dòng)時(shí)的VM參數(shù)指定)太少。

2、應(yīng)用用的太多,并且用完沒(méi)釋放,浪費(fèi)了。此時(shí)就會(huì)造成內(nèi)存泄露或者內(nèi)存溢出。

內(nèi)存泄露:申請(qǐng)使用完的內(nèi)存沒(méi)有釋放,導(dǎo)致虛擬機(jī)不能再次使用該內(nèi)存,此時(shí)這段內(nèi)存就泄露了,因?yàn)樯暾?qǐng)者不用了,而又不能被虛擬機(jī)分配給別人用。

內(nèi)存溢出:申請(qǐng)的內(nèi)存超出了JVM能提供的內(nèi)存大小,此時(shí)稱之為溢出。

 

二、OOM的類型有哪些

按照J(rèn)VM規(guī)范,除了程序計(jì)數(shù)器不會(huì)拋出OOM外,其他各個(gè)內(nèi)存區(qū)域都可能會(huì)拋出OOM。

JAVA虛擬機(jī)在運(yùn)行時(shí)會(huì)管理以下的內(nèi)存區(qū)域:

1、程序計(jì)數(shù)器:當(dāng)前線程執(zhí)行的字節(jié)碼的行號(hào)指示器,線程私有。

2、JAVA虛擬機(jī)棧:Java方法執(zhí)行的內(nèi)存模型,每個(gè)Java方法的執(zhí)行對(duì)應(yīng)著一個(gè)棧幀的進(jìn)棧和出棧的操作。

3、本地方法棧:類似“ JAVA虛擬機(jī)棧 ”,但是為native方法的運(yùn)行提供內(nèi)存環(huán)境。

4、JAVA堆:對(duì)象內(nèi)存分配的地方,內(nèi)存垃圾回收的主要區(qū)域,所有線程共享??煞譃樾律?,老生代。

5、方法區(qū):用于存儲(chǔ)已經(jīng)被JVM加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。Hotspot中的“永久代”。

6、運(yùn)行時(shí)常量池:方法區(qū)的一部分,存儲(chǔ)常量信息,如各種字面量、符號(hào)引用等。

7、直接內(nèi)存:并不是JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分, 可直接訪問(wèn)的內(nèi)存, 比如NIO會(huì)用到這部分。

最常見(jiàn)的OOM情況有以下三種:

1、java.lang.OutOfMemoryError: Java heap spacejava

堆內(nèi)存溢出,此種情況最常見(jiàn),一般由于內(nèi)存泄露或者堆的大小設(shè)置不當(dāng)引起。對(duì)于內(nèi)存泄露,需要通過(guò)內(nèi)存監(jiān)控軟件查找程序中的泄露代碼,而堆大小可以通過(guò)虛擬機(jī)參數(shù)-Xms,-Xmx等修改。

2、java.lang.OutOfMemoryError: PermGen spacejava

永久代溢出,即方法區(qū)溢出了,一般出現(xiàn)于大量Class或者jsp頁(yè)面,或者采用cglib等反射機(jī)制的情況,因?yàn)樯鲜銮闆r會(huì)產(chǎn)生大量的Class信息存儲(chǔ)于方法區(qū)。此種情況可以通過(guò)更改方法區(qū)的大小來(lái)解決,使用類似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,過(guò)多的常量尤其是字符串也會(huì)導(dǎo)致方法區(qū)溢出。

3、java.lang.StackOverflowError,不會(huì)拋OOM error,但也是比較常見(jiàn)的Java內(nèi)存溢出。JAVA虛擬機(jī)棧溢出,一般是由于程序中存在死循環(huán)或者深度遞歸調(diào)用造成的,棧大小設(shè)置太小也會(huì)出現(xiàn)此種溢出??梢酝ㄟ^(guò)虛擬機(jī)參數(shù)-Xss來(lái)設(shè)置棧的大小。

 

三、如何分析OOM問(wèn)題

分析OOM我們必須獲取dump堆的內(nèi)存鏡像。

可以采用如下兩種方式:

1、設(shè)置JVM參數(shù)

-XX:+HeapDumpOnOutOfMemoryError,設(shè)定當(dāng)發(fā)生OOM時(shí)自動(dòng)dump出堆信息。不過(guò)該方法需要JDK5以上版本。

2、使用JDK自帶的jmap命令。"jmap -dump:format=b,file=heap.bin"其中pid可以通過(guò)jps獲取。dump堆內(nèi)存信息后,需要對(duì)dump出的文件進(jìn)行分析,從而找到OOM的原因。常用的工具有:

① mat:eclipse memory analyzer, 基于eclipse RCP的內(nèi)存分析工具。詳細(xì)信息參見(jiàn):http://www.eclipse.org/mat/,推薦使用。

②jhat:JDK自帶的java heap analyze tool,可以將堆中的對(duì)象以html的形式顯示出來(lái),包括對(duì)象的數(shù)量,大小等等,并支持對(duì)象查詢語(yǔ)言O(shè)QL,分析相關(guān)的應(yīng)用后,可以通過(guò)http://localhost:7000來(lái)訪問(wèn)分析結(jié)果。不推薦使用,因?yàn)樵趯?shí)際的排查過(guò)程中,一般是先在生產(chǎn)環(huán)境 dump出文件來(lái),然后拉到自己的開(kāi)發(fā)機(jī)器上分析,所以,不如采用高級(jí)的分析工具,如前面的mat來(lái)的高效。

網(wǎng)上這個(gè)鏈接:https://0x9.me/c9jS1中提供了一個(gè)采用mat分析的例子 。

注意:因?yàn)镴VM規(guī)范沒(méi)有對(duì)dump出的文件的格式進(jìn)行定義,所以不同的虛擬機(jī)產(chǎn)生的dump文件并不是一樣的。在分析時(shí),需要針對(duì)不同的虛擬機(jī)的輸出采用不同的分析工具(當(dāng)然,有的工具可以兼容多個(gè)虛擬機(jī)的格式)。IBM HeapAnalyzer也是分析heap的一個(gè)常用的工具。

上述就是小編為大家分享的如何回答解決OOM類問(wèn)題了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站名稱:如何回答解決OOM類問(wèn)題
當(dāng)前路徑:http://weahome.cn/article/ihihos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部