1. 程式人生 > >webLogic記憶體溢位解決方案

webLogic記憶體溢位解決方案

初次接觸weblogic便被它強大的功能所折服。

關於如何安裝和配置weblogic度娘上有很多的介紹,這裡就不再贅述了。

可以參考以下連結:

http://blog.csdn.net/hackage4619/article/details/55189106

--------------------------------------------------------------------------------------------------常見的記憶體溢位介紹----------------------------------------------------------------------------------------------------------

導致OutOfMemoryError異常的常見原因有以下幾種:

1. 記憶體中載入的資料量過於龐大,如一次從資料庫取出過多資料;

2. 集合類中有對物件的引用,使用完後未清空,使得JVM不能回收;

3. 程式碼中存在死迴圈或迴圈產生過多重複的物件實體;

4. 使用的第三方軟體中的BUG;

5. 啟動引數記憶體值設定的過小;

此錯誤常見的錯誤提示:

1. tomcat:java.lang.OutOfMemoryError: PermGen space

2. tomcat:java.lang.OutOfMemoryError: Java heap space

3. weblogic:Root cause of ServletException java.lang.OutOfMemoryError

4. resin:java.lang.OutOfMemoryError

5. java:java.lang.OutOfMemoryError

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

正餐來了,當安裝和配置完weblogic以後滿懷欣喜的部署了專案想要一睹芳容,尼瑪怎麼也跑不起來,控制檯報錯如下:

java.lang.OutOfMemoryError: PermGen space

這個錯誤很明顯是記憶體溢位,通過一番查詢後終於找到了修改的地方,因為使用的是myeclipse繼承weblogic,解決方法如下:

知其然必要知其所以然,下面介紹下配置引數的一些含義:

-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
-vmargs 說明後面是JVM的引數,所以後面的其實都是JVM的引數了

-Xms128m JVM初始分配的堆記憶體-Xmx512m JVM最大允許分配的堆記憶體,按需分配-XX:PermSize=64M JVM初始分配的非堆記憶體-XX:MaxPermSize=128M JVM最大允許分配的非堆記憶體,按需分配

那麼問題又來了,什麼是堆什麼是非堆呢?

------------------------------------------------初識java記憶體概念--------------------------------------------------------------------

下圖是之前自己學習時整理的筆記,講的比較淺顯。

什麼是棧?什麼是堆?什麼是方法區?

答:

棧:用於存放區域性變數

堆:存放new出來的物件

方法區:存放類的資訊(程式碼)、static變數、常量池等   //注:方法區也是屬於堆的一部分

解析Student s1=new Student()在記憶體中的分配過程

1jvm執行到Student,首先在堆中查詢是不是有這個類的資訊,沒有就通過類載入器把這個類的資訊(屬性和方法等)載入進堆中。

2、執行Student s1 在棧中分配空間存放變數s1。(此時這個變數並沒有指向其他記憶體空間)

3、執行new Student(),在堆中的方法區外分配一片記憶體存放new出來的物件資訊(物件的方法只是存放地址指向方法區裡面的方法)

4、執行=賦值,將new出來的物件的記憶體空間的首地址賦給s1

記憶體分析示意圖:


------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------JVM記憶體進階-------------------------------------------------------------------

現在我們隊堆的概念有了一個大概的瞭解,那麼回到上面的問題,什麼是非堆呢?

其實這裡是個叫法的不同,非堆其實指的就是上面的方法區。

關於這一部分的內容,小白就不說自己的感悟了(怕誤導大家),在度娘上看了位大神的部落格覺得甚是牛逼(ps:雖然我看得一知半解):

附上鍊接地址:http://www.cnblogs.com/dingyingsi/p/3760447.html

有興趣的朋友可以看看,說的真的很好。

在這也感謝下這位大牛分享的姿勢。。。fuck。。知識。---做人不能太汙啊安靜

------------------------------------------------------------------------------------------------------------------------------------

最後總結:碼海無涯,回頭也不是岸啊大笑