Grails:Tomcat War文件部署给内存异常 [英] Grails: Tomcat War file deployment giving Memory exception

查看:439
本文介绍了Grails:Tomcat War文件部署给内存异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个在Tomcat 7.0.57中部署的Grails 2.3.6版本的应用程序。

I have a Grails 2.3.6 version application that am deploying in Tomcat 7.0.57

我已经将WAR文件放在Tomcat的webapps文件夹中。当我执行服务器启动时,我在控制台窗口中收到异常。它看起来像部署正在发生,并在一段时间后抛出异常。

I have placed the WAR file in webapps folder in Tomcat. And when I do a server startup, I get exceptions in the console window. It looks like deployment is taking place OK, and the exceptions are being thrown after some time.

请参阅下面的堆栈跟踪:当我去Windows任务管理器,jave.exe正在占用70-80%的CPU。

Please see below stacktrace: When i go to Windows task manager, jave.exe is taking almost 70 - 80% of CPU.

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"


推荐答案

Grails由于在运行时创建的动态代码,它使用的内存比预期的要多,并且使用更多的内存。你不应该需要增加permgen - 首先设置它在256MB。

Grails uses more memory than you'd expect, and more permgen because of the dynamic code that is created at runtime. You shouldn't need to increase permgen all that much - try setting it at 256MB at first.

将JVM参数设置为permgen和其他类似设置的最佳位置是setenv.sh(或Windows上的.bat)在Tomcat的bin目录中。它不是默认创建的,不需要是可执行的,但它使用与shell脚本相同的格式。任何导出的变量都将在catalina.sh中使用

The best place to put JVM args for permgen and other similar settings is in setenv.sh (or .bat on Windows) in Tomcat's bin directory. It's not created by default and doesn't need to be executable, but it uses the same format as shell scripts. Any exported variables will be used in catalina.sh

这应该超过堆和permgen的总数:

This should be more than enough total heap and permgen:

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

这篇关于Grails:Tomcat War文件部署给内存异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆