WEBLOGIC 記憶體溢位 解決方案(轉)
前幾天部署WebLogic出現執行緒阻塞情況,檢視後臺報錯:
後來在公司文件中發現以前所有weblogic的部署使用的JDK都是Sun的,於是沒有進行具體的分析就進行了更換。
今天客戶報告系統反應極慢 ,檢視後臺發現包記憶體溢位異常,導致整個系統沒有反應,於是進行了重啟才恢復。
------------------------------------------------------------------------
以下內容轉自其他Blog
------------------------------------------------------------------------
場景:
使用者培訓需要培訓環境,培訓環境搭好後,由於不常更新跑的時間較長,考驗系統穩定性的時候到了,很可惜穩定性這個問題與我們大家的美好願望一直背道而馳,天天求神拜佛也不行很不給面子,發現了一個原因解決了又出現了其他引起當機的因素,弄得是焦頭爛額,下面就是我們發現的一個引起當機的原因,請各位提高警惕。
9月16日系統當機,Weblogic報出java.lang.OutOfMemoryError: PermGen space異常,10-15分鐘後就會發生 <
排查分析:
1、參考tomcatFAQ: 中如下內容:
Why does the memory usage increase when I redeploy a web application?
Because the Classloader (and the Class objects it loaded) cannot be recycled. They are stored in the permanent heap generation by the JVM, and when you redepoy a new class loader is created, which loads another copy of all these classes. This can cause OufOfMemoryErrors eventually.
Tomcat FAQ指出SUN JVM對處於permanent heap generation(預設4M)的內容不做垃圾回收會導致記憶體溢位錯誤。
2、在SUN 官方網站找到一個2003年的bug Report,,Synopsis :PermHeap bloat in and only in server VM,直到現在狀態還是6-Fix Understood, 沒有修復。
解決方案:
根據上面的分析,再結合我們系統的環境(Weblogic 使用Solairs系統安裝的JDK5.0)我們可以確定是由於SUN JVM對permanent heap generation 區域的內容不做垃圾回收造成應用動態Load class檔案過多引起的OutOfMemory錯誤。同時提出兩套解決方案:
增加PermGen space引數大小
更換不同廠家JVM
考慮由於開發採用JDK1.5,換用其他JVM存在風險,故修改weblogic啟動服務呼叫的批處理setDomainEnv.sh檔案,將其中的一截片斷進行修改:
if [ "${JAVA_VENDOR}" = "Sun" ] ; then
MEM_ARGS="${MEM_ARGS} ${MEM_DEV_ARGS} -XX:MaxPermSize=128m"
export MEM_ARGS
fi
中MaxPermSize改成1024m,驗證問題是否存在。
實施結果:
系統再未出現OutOfMemoryError執行正常.該原因引起的當機問題解決。
從Java的經典書籍到Sun的官方網站都在宣揚Java的優勢之一——垃圾回收,“自動釋放記憶體,減輕程式設計負擔”,可是誰能想到Sun的JVM還有這問題——不回收load class檔案而產生的Class類物件。所以不要迷信權威,根據現象一步一步抽絲剝繭、細心求證才是王道!
--------------------------------------------------------------------------------------------------------------------------
專案大了以後開發環境頻繁deploy會導致weblogic報permGen 錯誤,查了一下,暫時解決的辦法是:
在weblogic/common/bin/commEnv.sh中配置
MEM_ARGS="-Xms32m -Xmx200m -XX:MaxPermSize=128m"
-Xms:記憶體初始值
-Xmx:記憶體最大值(不要超過記憶體的80%)
MaxPermSize:PermGen(Class和Meta存放區域)區域記憶體最大值。
可調整為:
MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"
-XX:MaxPermSize改為256或512
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/751371/viewspace-739448/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WebLogic: 記憶體溢位Web記憶體溢位
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- Java記憶體溢位的詳細解決方案Java記憶體溢位
- Android圖片記憶體溢位的解決方案Android記憶體溢位
- 解決記憶體溢位九法記憶體溢位
- Java程式碼執行記憶體溢位詳解及解決方案Java記憶體溢位
- Windows Tomcat 記憶體溢位解決方法WindowsTomcat記憶體溢位
- Tomcat服務 MyEclipse 記憶體溢位 解決方案(之一)TomcatEclipse記憶體溢位
- 記憶體溢位記憶體溢位
- tomcat記憶體溢位:PermGen space解決方法Tomcat記憶體溢位
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- java常見的幾種記憶體溢位和解決方案Java記憶體溢位
- Java記憶體溢位Java記憶體溢位
- JBOSS記憶體溢位記憶體溢位
- 記憶體溢位:native溢位 和 上層溢位記憶體溢位
- tomcat伺服器記憶體溢位解決方法Tomcat伺服器記憶體溢位
- java 讀 大檔案excel 記憶體溢位 解決JavaExcel記憶體溢位
- [jenkins]解決jenkins記憶體溢位問題Jenkins記憶體溢位
- 【轉】java中的記憶體溢位和記憶體洩漏Java記憶體溢位
- 記錄佇列序列化模型導致的記憶體溢位的解決方案佇列模型記憶體溢位
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 記憶體洩漏和記憶體溢位記憶體溢位
- java 程式記憶體溢位Java記憶體溢位
- 記憶體溢位問題記憶體溢位
- 記憶體溢位的分析記憶體溢位
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- eclipse啟動時記憶體溢位的解決辦法Eclipse記憶體溢位
- 谷歌安卓5.1.1即將推送:解決記憶體溢位問題谷歌安卓記憶體溢位
- Android記憶體溢位分析Android記憶體溢位
- Java記憶體溢位情況Java記憶體溢位
- 記憶體溢位的問題記憶體溢位
- Flume記憶體溢位錯誤記憶體溢位
- JNI練習-記憶體溢位記憶體溢位
- 記一次網頁記憶體溢位分析及解決實踐網頁記憶體溢位
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- 記憶體洩漏與記憶體溢位神比較記憶體溢位
- return new物件造成溢位記憶體物件記憶體