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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jvm記憶體設定及記憶體溢位、解決方案JVM記憶體溢位
- Windows Tomcat 記憶體溢位解決方法WindowsTomcat記憶體溢位
- Java程式碼執行記憶體溢位詳解及解決方案Java記憶體溢位
- tomcat記憶體溢位:PermGen space解決方法Tomcat記憶體溢位
- Java棧溢位|記憶體洩漏|記憶體溢位Java記憶體溢位
- 記憶體溢位記憶體溢位
- tomcat伺服器記憶體溢位解決方法Tomcat伺服器記憶體溢位
- 阿里大佬講解Java記憶體溢位示例(堆溢位、棧溢位)阿里Java記憶體溢位
- Java記憶體溢位Java記憶體溢位
- 記錄佇列序列化模型導致的記憶體溢位的解決方案佇列模型記憶體溢位
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 關於Allowed memory size of (PHP記憶體溢位)錯誤的可能原因及解決方案PHP記憶體溢位
- 記一次網頁記憶體溢位分析及解決實踐網頁記憶體溢位
- JavaScript之記憶體溢位和記憶體洩漏JavaScript記憶體溢位
- Jmeter記憶體溢位:java.lang.OutOfMemoryError: Java heap space解決思路JMeter記憶體溢位JavaError
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- [Java基礎]記憶體洩漏和記憶體溢位Java記憶體溢位
- Java EasyExcel 匯出報記憶體溢位如何解決JavaExcel記憶體溢位
- return new物件造成溢位記憶體物件記憶體
- mybatis-plus getOne 記憶體溢位MyBatis記憶體溢位
- JVM 發生記憶體溢位的 8 種原因、及解決辦法JVM記憶體溢位
- java向excel 寫入海量資料記憶體溢位問題 解決JavaExcel記憶體溢位
- java記憶體溢位和記憶體洩漏的區別Java記憶體溢位
- 關於 PHP 記憶體溢位的思考PHP記憶體溢位
- 記憶體和棧溢位問題定位記憶體
- Windbg下使用dump分析記憶體溢位記憶體溢位
- php記憶體溢位了怎麼辦?PHP記憶體溢位
- Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)RedisError記憶體溢位
- 解決SqlServer執行指令碼,檔案過大,記憶體溢位問題SQLServer指令碼記憶體溢位
- 記一次記憶體溢位問題的排查、分析過程及解決思路記憶體溢位
- JVM(2)-Java記憶體區域與記憶體溢位異常JVMJava記憶體溢位
- apache2.4在windows server2012上出現記憶體溢位解決方法ApacheWindowsServer記憶體溢位
- Redis緩衝區溢位及解決方案Redis
- 簡單的記憶體“洩露”和“溢位”記憶體
- vue專案編譯node記憶體溢位Vue編譯記憶體溢位
- 強如 Disruptor 也發生記憶體溢位?記憶體溢位
- 基礎學習-記憶體溢位問題記憶體溢位