2014-12-22 36 views
1

我有我部署到Tomcat 7.0.57的Grails:Tomcat的戰爭文件部署給內存異常

我已經把在web應用文件夾中的WAR文件在Tomcat中一個Grails 2.3.6版本的應用程序。當我執行服務器啓動時,我在控制檯窗口中收到異常。看起來部署正在進行,並且在一段時間後拋出異常。

請參閱下面的堆棧跟蹤:當我去Windows任務管理器,jave.exe佔CPU的幾乎70-80%。

INFO: Deploying web application archive C:\Tomcat7\apache-tomcat-7.0.57\webapps\ 
MY-1.0.2.war 
Dec 22, 2014 3:58:17 PM org.apache.catalina.startup.TaglibUriRule body 
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined 
Dec 22, 2014 3:58:17 PM org.apache.catalina.startup.TaglibUriRule body 
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined 
Dec 22, 2014 3:58:18 PM org.apache.catalina.startup.TaglibUriRule body 
INFO: TLD skipped. URI: http://www.springframework.org/tags is already defined 
Dec 22, 2014 3:58:18 PM org.apache.catalina.startup.TaglibUriRule body 
INFO: TLD skipped. URI: http://www.springframework.org/tags/form is already defi 
ned 
log4j:WARN No appenders could be found for logger (org.codehaus.groovy.grails.co 
mmons.cfg.ConfigurationHelper). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more in 
fo. 

Configuring Spring Security Core ... 
... finished configuring Spring Security Core 


Dec 22, 2014 3:58:55 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Tomcat7\apache-tomcat-7.0.57\webapp 
s\docs 
Dec 22, 2014 3:58:55 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deployment of web application directory C:\Tomcat7\apache-tomcat-7.0.57\we 
bapps\docs has finished in 30 ms 
Dec 22, 2014 3:58:55 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Tomcat7\apache-tomcat-7.0.57\webapp 
s\examples 
Dec 22, 2014 3:58:56 PM org.apache.tomcat.util.digester.Digester startElement 
SEVERE: Begin event threw error 
java.lang.OutOfMemoryError: PermGen space 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:800) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 
2) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
     at org.apache.catalina.deploy.SecurityConstraint.<init>(SecurityConstrai 
nt.java:94) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 

     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct 
orAccessorImpl.java:57) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC 
onstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
     at java.lang.Class.newInstance(Class.java:379) 
     at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRu 
le.java:145) 
     at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1 
288) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startEle 
ment(AbstractSAXParser.java:509) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp 
l.scanStartElement(XMLDocumentFragmentScannerImpl.java:1363) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp 
l$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2786) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(X 
MLDocumentScannerImpl.java:606) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp 
l.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X 
ML11Configuration.java:848) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X 
ML11Configuration.java:777) 
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser. 
java:141) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Ab 
stractSAXParser.java:1213) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p 
arse(SAXParserImpl.java:648) 
     at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1561) 
     at org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.j 
ava:1825) 
     at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.jav 
a:1263) 

Dec 22, 2014 3:58:57 PM org.apache.catalina.startup.HostConfig deployDirectories 

SEVERE: Error waiting for multi-thread deployment of directories to complete 
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen spa 
ce 
     at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
     at java.util.concurrent.FutureTask.get(FutureTask.java:188) 
     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j 
ava:1148) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490 
) 
     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1611) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java 
:330) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl 
eSupport.java:117) 
     at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBa 
se.java:90) 
     at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase 
.java:402) 
     at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:34 
7) 
     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja 
va:1140) 
     at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java 
:816) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. 
java:1575) 
     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. 
java:1565) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. 
java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor 
.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.OutOfMemoryError: PermGen space 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Ab 
stractSAXParser.java:1213) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p 
arse(SAXParserImpl.java:648) 
     at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1561) 
     at org.apache.catalina.startup.ContextConfig.parseWebXml(ContextConfig.j 
ava:1825) 
     at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.jav 
a:1263) 
     at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfi 
g.java:889) 
     at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfi 
g.java:386) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl 
eSupport.java:117) 
     at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBa 
se.java:90) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContex 
t.java:5380) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase 
.java:901) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:87 
7) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649) 

     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav 
a:1245) 
     at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig 
.java:1895) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:47 
1) 
     ... 4 more 

Dec 22, 2014 3:58:57 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Tomcat7\apache-tomcat-7.0.57\webapp 
s\host-manager 
Dec 22, 2014 3:59:19 PM org.apache.catalina.startup.HostConfig deployDirectories 

SEVERE: Error waiting for multi-thread deployment of directories to complete 
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen spa 
ce 
     at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
     at java.util.concurrent.FutureTask.get(FutureTask.java:188) 
     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j 
ava:1148) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490 
) 
     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1611) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java 
:330) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl 
eSupport.java:117) 
     at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBa 
se.java:90) 
     at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase 
.java:402) 
     at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:34 
7) 
     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja 
va:1140) 
     at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java 
:816) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. 
java:1575) 
     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. 
java:1565) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. 
java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor 
.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.OutOfMemoryError: PermGen space 

Dec 22, 2014 3:59:19 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Tomcat7\apache-tomcat-7.0.57\webapp 
s\manager 
Dec 22, 2014 3:59:20 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Tomcat7\apache-tomcat-7.0.57\webapp 
s\ROOT 
Dec 22, 2014 3:59:20 PM org.apache.catalina.startup.HostConfig deployDirectories 

SEVERE: Error waiting for multi-thread deployment of directories to complete 
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen spa 
ce 
     at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
     at java.util.concurrent.FutureTask.get(FutureTask.java:188) 
     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j 
ava:1148) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490 
) 
     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1611) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java 
:330) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl 
eSupport.java:117) 
     at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBa 
se.java:90) 
     at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase 
.java:402) 
     at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:34 
7) 
     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja 
va:1140) 
     at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java 
:816) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. 
java:1575) 
     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. 
java:1565) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. 
java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor 
.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.OutOfMemoryError: PermGen space 

Exception in thread "quartzScheduler_QuartzSchedulerThread" Dec 22, 2014 3:59:21 
PM org.apache.catalina.startup.HostConfig deployDirectories 
SEVERE: Error waiting for multi-thread deployment of directories to complete 
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen spa 
ce 
     at java.util.concurrent.FutureTask.report(FutureTask.java:122) 
     at java.util.concurrent.FutureTask.get(FutureTask.java:188) 
     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j 
ava:1148) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490 
) 
     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1611) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java 
:330) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl 
eSupport.java:117) 
     at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBa 
se.java:90) 
     at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase 
.java:402) 
     at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:34 
7) 
     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.ja 
va:1140) 
     at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java 
:816) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. 
java:1575) 
     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase. 
java:1565) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. 
java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor 
.java:615) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.OutOfMemoryError: PermGen space 


Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler i 
n thread "quartzScheduler_QuartzSchedulerThread" 
Exception in thread "main" 
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler i 
n thread "main" 

回答

2

由於在運行時創建的動態代碼,Grails使用的內存超出了您的預期,因此使用更多內存。你不需要增加permgen - 首先嚐試將它設置爲256MB。

放置permgen和其他類似設置的JVM參數的最佳位置是Tomcat bin目錄中的setenv.sh(或Windows上的.bat)。它不是默認創建的,不需要是可執行的,但它使用與shell腳本相同的格式。任何出口變量將在catalina.sh

使用這應該是綽綽有餘總堆和PermGen的更多:

export CATALINA_OPTS="-Xms256m -Xmx768m -XX:MaxPermSize=256m" 
+1

在「setenv.bat」添加文件 - 設置JAVA_OPTS = -Dfile.encoding = UTF -8 -Xms128m -Xmx1024m -XX:PermSize = 64m -XX:MaxPermSize = 256m,它工作! – donguy76