欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA程序內(nèi)存溢出問(wèn)題原因分析

 更新時(shí)間:2024年09月02日 16:53:39   作者:liuzx32  
這篇文章主要介紹了JAVA程序內(nèi)存溢出問(wèn)題原因,較為詳細(xì)的分析java導(dǎo)致程序內(nèi)存溢出的原因與解決方法,需要的朋友可以參考下

本文較為詳細(xì)的分析了JAVA程序內(nèi)存溢出問(wèn)題原因。分享給大家供大家參考。具體如下:

遇到一個(gè)線上系統(tǒng)報(bào) java.lang.OutOfMemoryError: PermGen space 錯(cuò)誤,需要定位一下問(wèn)題。很久之前到時(shí)弄過(guò)這個(gè),現(xiàn)在還真有點(diǎn)不記得了,但這個(gè)真的是一個(gè)非常有意思的問(wèn)題,值得好好研究一下。首先第一反應(yīng)當(dāng)然是加上-XX:+PrintGCDetails參數(shù)來(lái)看具體的GC日志,但是由于程序是tomcat啟動(dòng)的,擔(dān)心里面封裝的東西太多不好定位,既然在windows下面,所以還是借助可視化工具好了。
然后我們來(lái)看一下這個(gè)錯(cuò)誤的產(chǎn)生原因,在網(wǎng)上找到一段解釋?zhuān)f(shuō)的很不錯(cuò),貼過(guò)來(lái)借用一下:)
 PermGen space的全稱(chēng)是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,它和存放類(lèi)實(shí)例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤,這種錯(cuò)誤常見(jiàn)在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過(guò)了jvm默認(rèn)的大小(4M)那么就會(huì)產(chǎn)生此錯(cuò)誤信息了。
那么我們先加大PermGen的初始內(nèi)存大?。?/p>

linux下在catalina.sh文件的開(kāi)頭加上:

復(fù)制代碼 代碼如下:
JAVA_OPTS="-Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m"

windows下在catalina.bat的文件開(kāi)頭加上:

復(fù)制代碼 代碼如下:
set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=256m

接著我們還是用可視化的內(nèi)存查看工具來(lái)定位一下具體的問(wèn)題。對(duì)于jdk6首選當(dāng)然是自帶的工具啦,比較常用的有jconsole和jvisualvm(使用后發(fā)現(xiàn)后者更強(qiáng)大,因?yàn)橛胸S富的插件支持)。這次又遇到一個(gè)比較詭異的問(wèn)題,就是分析工具打開(kāi)后居然找不到tomcat進(jìn)程(事后發(fā)現(xiàn)居然啟動(dòng)的是jre,改成jdk應(yīng)該就可以了)。

既然本地不讓連,我就遠(yuǎn)程連接得了,打開(kāi)JMX即可。
和上面一樣,在catalina.sh或catalina.bat文件的開(kāi)頭的JAVA_OPTS里面加上

復(fù)制代碼 代碼如下:
-Djava.rmi.server.hostname=192.168.1.101 -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

啟動(dòng)程序以后用netstat查看一下端口是否正確打開(kāi),以確保遠(yuǎn)程可以連接上。
我這里偷懶了下,把a(bǔ)uthenticate關(guān)掉了,要是打開(kāi)需要設(shè)置一些權(quán)限的東西,比較麻煩。這個(gè)設(shè)置在我本地的PC機(jī)上生效,但是在服務(wù)器上居然不行,可能裝了什么軟件把端口給封了,所以我只好把端口改成1000。打開(kāi)jvisualvm,點(diǎn)擊file -> add JMX connection,然后加上localhost:1000就連上了。

等連上程序以后,觀察一段時(shí)間的內(nèi)存變化狀況,我重點(diǎn)看了下Perm的情況,一直穩(wěn)定在94m的樣子,運(yùn)行一天一切正常??赡苁侵霸O(shè)置Perm內(nèi)存大小沒(méi)有生效,因?yàn)镻erm默認(rèn)初始化是16m,最大是64m,而實(shí)際占用量確實(shí)有可能導(dǎo)致這個(gè)問(wèn)題,從目前的現(xiàn)象來(lái)看應(yīng)該是不會(huì)再出現(xiàn)這個(gè)問(wèn)題了。如果需要更進(jìn)一步定位問(wèn)題,還可以使用btrace去查看某個(gè)方法具體被調(diào)用的地方。這樣可以定位到某些方法是否按預(yù)期執(zhí)行。

希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java實(shí)現(xiàn)簡(jiǎn)單的掃雷小游戲

    java實(shí)現(xiàn)簡(jiǎn)單的掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • springBoot項(xiàng)目如何實(shí)現(xiàn)啟動(dòng)多個(gè)實(shí)例

    springBoot項(xiàng)目如何實(shí)現(xiàn)啟動(dòng)多個(gè)實(shí)例

    這篇文章主要介紹了springBoot項(xiàng)目如何實(shí)現(xiàn)啟動(dòng)多個(gè)實(shí)例的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SSM使用mybatis分頁(yè)插件pagehepler實(shí)現(xiàn)分頁(yè)示例

    SSM使用mybatis分頁(yè)插件pagehepler實(shí)現(xiàn)分頁(yè)示例

    本篇文章主要介紹了SSM使用mybatis分頁(yè)插件pagehepler實(shí)現(xiàn)分頁(yè)示例,使用分頁(yè)插件的原因,簡(jiǎn)化了sql代碼的寫(xiě)法,實(shí)現(xiàn)較好的物理分頁(yè),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-03-03
  • Java原生序列化和反序列化代碼實(shí)例

    Java原生序列化和反序列化代碼實(shí)例

    這篇文章主要介紹了Java原生序列化和反序列化代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 代碼分析Java中線程的等待與喚醒

    代碼分析Java中線程的等待與喚醒

    本篇文章給大家分享了關(guān)于Java中線程的等待與喚醒的知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2018-10-10
  • SpringBoot與單元測(cè)試JUnit的結(jié)合操作

    SpringBoot與單元測(cè)試JUnit的結(jié)合操作

    這篇文章主要介紹了SpringBoot與單元測(cè)試JUnit的結(jié)合操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 淺談Maven resrouce下filtering作用

    淺談Maven resrouce下filtering作用

    Filtering是Maven Resources Plugin的一個(gè)功能,本文主要介紹了淺談Maven resrouce下filtering作用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 通過(guò)實(shí)例學(xué)習(xí)JAVA對(duì)象轉(zhuǎn)成XML輸出

    通過(guò)實(shí)例學(xué)習(xí)JAVA對(duì)象轉(zhuǎn)成XML輸出

    這篇文章主要介紹了通過(guò)實(shí)例學(xué)習(xí)JAVA對(duì)象轉(zhuǎn)成XML輸出,做流程圖的項(xiàng)目時(shí),新的流程定義為xml的,需要對(duì)xml與java對(duì)象進(jìn)行互轉(zhuǎn),下面我們來(lái)深入學(xué)習(xí),需要的朋友可以參考下
    2019-06-06
  • Java一個(gè)簡(jiǎn)單的紅包生成算法

    Java一個(gè)簡(jiǎn)單的紅包生成算法

    今天小編就為大家分享一篇關(guān)于Java一個(gè)簡(jiǎn)單的紅包生成算法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 連續(xù)調(diào)用多個(gè)外部系統(tǒng)寫(xiě)接口保證數(shù)據(jù)一致性的思路

    連續(xù)調(diào)用多個(gè)外部系統(tǒng)寫(xiě)接口保證數(shù)據(jù)一致性的思路

    今天小編就為大家分享一篇關(guān)于連續(xù)調(diào)用多個(gè)外部系統(tǒng)寫(xiě)接口保證數(shù)據(jù)一致性的思路,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12

最新評(píng)論