你對Tomcat 的JVM內存溢出問題的解決方法是否了解這裡和大家分享一下相信本文介紹一定會讓你有所收獲
tomcat 的JVM內存溢出問題的解決
最近在熟悉一個開發了有幾年的項目需要把數據庫從mysql移植到oracle首先把jdbc的連接指向mysql打包放到tomcat裡面可以跑起來沒有問題可是當把jdbc連接指向oracle的時候tomcat就連續拋javalangOutOfMemoryError的錯誤上網google了一下了解了一下tomcat的運行機制也解決了問題share出來以備查下面有幾種JVM內存溢出的現象和解決方法請看詳細介紹
JVM內存溢出現象提示一javalangOutOfMemoryError:Javaheapspace
解釋
Heapsize設置
JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置JVM在啟動的時候會自動設置Heapsize的值其初始空間(即Xms)是物理內存的/最大空間(Xmx)是物理內存的/可以利用JVM提供的XmnXmsXmx等選項可進行設置Heapsize的大小是YoungGeneration和TenuredGeneraion之和
提示在JVM中如果%的時間是用於GC且可用的Heapsize不足%的時候將拋出此異常信息
提示HeapSize最大不要超過可用物理內存的%一般的要將Xms和Xmx選項設置為相同而Xmn為/的Xmx值
解決方法
手動設置Heapsize
修改TOMCAT_HOME/bin/catalinabat在echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行
Java代碼
setJAVA_OPTS=%JAVA_OPTS%server
XmsmXmxmXX:MaxNewSize=m
setJAVA_OPTS=%JAVA_OPTS%server
XmsmXmxmXX:MaxNewSize=m
或修改catalinash
在echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行
JAVA_OPTS=$JAVA_OPTSserverXmsm
XmxmXX:MaxNewSize=m
JVM內存溢出現象提示二javalangOutOfMemoryError:PermGenspace
原因
PermGenspace的全稱是PermanentGenerationspace是指內存的永久保存區域這塊內存主要是被JVM存放Class和Meta信息的Class在被Loader時就會被放到PermGenspace中它和存放類實例(Instance)的Heap區域不同GC(GarbageCollection)不會在主程序運行期對PermGenspace進行清理所以如果你的應用中有很CLASS的話就很可能出現PermGenspace錯誤這種錯誤常見在web服務器對JSP進行precompile的時候如果你的WEBAPP下都用了大量的第三方jar其大小超過了jvm默認的大小(M)那麼就會產生此錯誤信息了
解決方法
手動設置MaxPermSize大小
修改TOMCAT_HOME/bin/catalinabat(Linux下為catalinash)在Java代碼
echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行
setJAVA_OPTS=%JAVA_OPTS%server
XX:PermSize=MXX:MaxPermSize=m
echoUsingCATALINA_BASE:$CATALINA_BASE上面加入以下行
setJAVA_OPTS=%JAVA_OPTS%server
XX:PermSize=MXX:MaxPermSize=m
catalinash下為
Java代碼
JAVA_OPTS=$JAVA_OPTSserver
XX:PermSize=MXX:MaxPermSize=m
JAVA_OPTS=$JAVA_OPTSserver
XX:PermSize=MXX:MaxPermSize=m
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25540.html