1.參考:
http://blog.csdn.net/fox009/article/details/5633007
http://hi.baidu.com/like_dark/blog/item/19c1948b3292b0799f2fb468.html
http://anyeeye.iteye.com/blog/444624
Tomcat6性能調優 出現java.lang.OutOfMemoryError: PermGen space
http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/
2.報錯:
Exception in thread "DispatcherThread" java.lang.OutOfMemoryError: PermGen space Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space Exception in thread "State Saver" java.lang.OutOfMemoryError: PermGen space Exception in thread "AWT-Windows" java.lang.OutOfMemoryError: OutOfMemoryError
3.原因:
PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域,這塊內存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGen space中,它和存放類實例(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的應用中有很多CLASS的話,就很可能出現PermGen space錯誤,這種錯誤常見在web服務器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那么就會產生此錯誤信息了。
4.解決方法1:
手動設置MaxPermSize大小,如果是linux系統,修改TOMCAT_HOME/bin/catalina.sh,如果是windows系統,修改TOMCAT_HOME/bin/catalina.bat,
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建議:將相同的第三方jar文件移置到tomcat/shared/lib目錄下,這樣可以達到減少jar 文檔重復占用內存的目的。
5.解決方法2
修改eclipse.ini文件,修改如下:
- vmargs -Dosgi.requiredJavaVersion=1.5 - Xms128m - Xmx512m -XX:PermSize= 64M -XX:MaxPermSize=128M
如果還報錯,可以考慮如下修改
- vmargs -Dosgi.requiredJavaVersion=1.5 - Xms512m - Xmx1024m -XX:PermSize= 256M -XX:MaxPermSize=512M
報錯:
2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc 嚴重: The web application [ / Application] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 嚴重: The web application [ / Application] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak. 2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 嚴重: The web application [ /Application] appears to have started a thread named [AWT- Windows] but has failed to stop it. This is very likely to create a memory leak. 2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads 嚴重: The web application [ /Application] appears to have started a thread named [Thread-14 ] but has failed to stop it. This is very likely to create a memory leak. 2011-11-21 21:10:46 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap 嚴重: The web application [ /Application] created a ThreadLocal with key of type [net.sf.json.AbstractJSON$1] (value [net.sf.json.AbstractJSON$1 @3661eeb]) and a value of type [java.util.HashSet] (value [[]]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak. 2011-11-21 21:10:50 org.apache.catalina.core.ApplicationContext log 信息: Initializing Spring FrameworkServlet 'Dispatcher'
修改catalina.bat
添加
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m - Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize= 256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"
樣例
# JSSE_HOME (Optional) May point at your Java Secure Sockets Extension # (JSSE) installation, whose JAR files will be added to the # system class path used to start Tomcat. # # CATALINA_PID (Optional) Path of the file which should contains the pid # of catalina startup java process, when start (fork) is used # # $Id: catalina.sh 609438 2008-01-06 22:14 :28Z markt $ # ----------------------------------------------------------------------------- JAVA_OPTS ="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize= 256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC " # OS specific support. $var _must_ be set to either true or false . cygwin = false os400 = false darwin = false case "`uname`" in CYGWIN *) cygwin= true ;; OS400 *) os400= true ;; Darwin *) darwin= true ;; esac # resolve links - $0 may be a softlink PRG ="$0"
具體參數根據自己機器情況而定
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m
-Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=
256m
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
