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

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

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

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

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

linux下在catalina.sh文件的開頭加上:

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

windows下在catalina.bat的文件開頭加上:

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

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

既然本地不讓連,我就遠(yuǎn)程連接得了,打開JMX即可。
和上面一樣,在catalina.sh或catalina.bat文件的開頭的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

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

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

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

相關(guān)文章

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

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

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

    springBoot項目如何實現(xiàn)啟動多個實例

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

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

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

    Java原生序列化和反序列化代碼實例

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

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

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

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

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

    淺談Maven resrouce下filtering作用

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

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

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

    Java一個簡單的紅包生成算法

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

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

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

最新評論