WAR文件在Tomcat服务器中抛出OutOfMemoryError

时间:2013-12-25 10:26:10

标签: java eclipse spring tomcat out-of-memory

我有一个Spring MVC WAR文件,可以在我的本地机器(程序和网站)中完美运行。

将文件上传到服务器(Tomcat 7后)并尝试访问该文件后,catalina日志文件会显示java.lang.OutOfMemoryError

我尝试在导出之前将ArgumentsRun > Run Configurations部分附加到-Xmx2048m部分,以修改Eclipse IDE的-Xmx1024m部分的VM Arguments标签中的内存但是没有做任何改变,除了第一个导致

Error occurred during initialization of VM
Could not reserve enough space for object heap

在我的本地机器上。

以下是我初次访问该网站时的完整日志文件:

12 25, 13 6:16:23 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-11032"]
12 25, 13 6:16:23 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 658 ms
12 25, 13 6:16:23 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
12 25, 13 6:16:23 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.26
12 25, 13 6:16:23 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /home/username/tomcat7/webapps/project.war
12 25, 13 6:16:23 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(/home/username/tomcat7/webapps/project/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
12 25, 13 6:16:40 PM org.apache.catalina.startup.HostConfig deployWARs
SEVERE: Error waiting for multi-thread deployment of WAR files to complete
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space
  at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
  at java.util.concurrent.FutureTask.get(FutureTask.java:83)
  at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:751)
  at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:471)
  at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1412)
  at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
  at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
  at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
  at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401)
  at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:346)
  at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1145)
  at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:782)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566)
  at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556)
  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
  at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.OutOfMemoryError: Java heap space
  at org.apache.tomcat.util.bcel.classfile.LineNumberTable.<init>(LineNumberTable.java:68)
  at org.apache.tomcat.util.bcel.classfile.Attribute.readAttribute(Attribute.java:144)
  at org.apache.tomcat.util.bcel.classfile.Code.<init>(Code.java:86)
  at org.apache.tomcat.util.bcel.classfile.Attribute.readAttribute(Attribute.java:140)
  at org.apache.tomcat.util.bcel.classfile.FieldOrMethod.<init>(FieldOrMethod.java:58)
  at org.apache.tomcat.util.bcel.classfile.Method.<init>(Method.java:72)
  at org.apache.tomcat.util.bcel.classfile.ClassParser.readMethods(ClassParser.java:268)
  at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:128)
  at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2032)
  at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1923)
  at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1891)
  at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1877)
  at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270)
  at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)
  at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:345)
  at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
  at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
  at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
  at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
  at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
  at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
  at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
  ... 5 more
12 25, 13 6:16:41 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-11032"]
12 25, 13 6:16:45 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 21778 ms

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

就像在评论部分中所说的那样,你必须增加服务器使用的JVM上的堆大小,而不是在eclipse中(因为只有在本地运行它时才有效)。

请尝试将其设置为-Xmx512m-Xmx1024m(或您需要的任何其他内容)。

如果您不知道如何操作,请告诉我您正在运行的Tomcat版本和平台(Linux,Windows等)。

答案 1 :(得分:1)

尝试增加JVM的堆大小。

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size

对于Ex。 -Xms(最小尺寸)和-Xmx(最大尺寸)

-Xms64m -Xmx256m

答案 2 :(得分:0)

我在Amazon AWS ubuntu服务器中遇到此错误 - Tomcat 7

首先找到我的tomcat catalina.sh文件并更新以下行,我解决了这个问题:

locate catalina.sh

/usr/share/tomcat7/bin/catalina.sh

sudo vi /usr/share/tomcat7/bin/catalina.sh

在最高评论后添加以下行:

CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"