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

Java WAR文件在Tomcat服务器中抛出OutOfMemoryError,java,eclipse,spring,tomcat,out-of-memory,Java,Eclipse,Spring,Tomcat,Out Of Memory,我有一个Spring MVC WAR文件,它在我的本地机器(程序和网站)上运行得非常好 一旦我将文件上传到服务器(atomcat7)并尝试访问它,catalina日志文件就会显示java.lang.OutOfMemoryError 在导出之前,我尝试通过在VM Arguments部分添加-Xmx2048m或-Xmx1024m来修改Eclipse IDE的运行配置部分的Arguments选项卡中的内存,但除了第一个更改外,其他任何更改都没有导致错误 Error occurred during in

我有一个Spring MVC WAR文件,它在我的本地机器(程序和网站)上运行得非常好

一旦我将文件上传到服务器(a
tomcat7
)并尝试访问它,catalina日志文件就会显示
java.lang.OutOfMemoryError

在导出之前,我尝试通过在
VM Arguments
部分添加
-Xmx2048m
-Xmx1024m
来修改Eclipse IDE的
运行配置
部分的
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
12 25,13 6:16:23 PM org.apache.coyote.AbstractProtocol init
信息:正在初始化ProtocolHandler[“http-bio-11032”]
12 25,13 6:16:23 PM org.apache.catalina.startup.catalina加载
信息:初始化在658毫秒内完成
12月25日,13日下午6:16:23 org.apache.catalina.core.StandardService startInternal
信息:开始服务Catalina
12 25,13 6:16:23 PM org.apache.catalina.core.StandardEngine startInternal
信息:启动Servlet引擎:ApacheTomcat/7.0.26
12 25,13 6:16:23 PM org.apache.catalina.startup.HostConfig deployWAR
信息:部署web应用程序存档/home/username/tomcat7/webapps/project.war
12 25,13 6:16:23 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
信息:validateJarFile(/home/username/tomcat7/webapps/project/WEB-INF/lib/servlet-api.jar)-未加载jar。参见Servlet规范2.3,第9.7.2节。有问题的类:javax/servlet/servlet.class
12月25日,13日下午6:16:40 org.apache.catalina.startup.HostConfig deployWARs
严重:等待WAR文件的多线程部署完成时出错
java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:java堆空间
位于java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
位于java.util.concurrent.FutureTask.get(FutureTask.java:83)
位于org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:751)
位于org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:471)
位于org.apache.catalina.startup.HostConfig.start(HostConfig.java:1412)
位于org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
在org.apache.catalina.util.LifecycleSupport.FireLifecycleSupport(LifecycleSupport.java:119)上
位于org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
位于org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401)
位于org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:346)
位于org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1145)
位于org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:782)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566)
位于org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556)
位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
位于java.util.concurrent.FutureTask.run(FutureTask.java:138)
位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
运行(Thread.java:662)
原因:java.lang.OutOfMemoryError:java堆空间
位于org.apache.tomcat.util.bcel.classfile.LineNumberTable.(LineNumberTable.java:68)
位于org.apache.tomcat.util.bcel.classfile.Attribute.readAttribute(Attribute.java:144)
位于org.apache.tomcat.util.bcel.classfile.Code.(Code.java:86)
位于org.apache.tomcat.util.bcel.classfile.Attribute.readAttribute(Attribute.java:140)
位于org.apache.tomcat.util.bcel.classfile.FieldOrMethod.(FieldOrMethod.java:58)
位于org.apache.tomcat.util.bcel.classfile.Method.(Method.java:72)
位于org.apache.tomcat.util.bcel.classfile.ClassParser.readMethods(ClassParser.java:268)
位于org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:128)
位于org.apache.catalina.startup.ContextConfig.processAnnotationStream(ContextConfig.java:2032)
位于org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1923)
位于org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1891)
位于org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1877)
位于org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270)
位于org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)
位于org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:345)
在org.apache.catalina.util.LifecycleSupport.FireLifecycleSupport(LifecycleSupport.java:119)上
位于org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
位于org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
位于org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
... 还有5个
12251326:16:41 PM org.apache.coyote.AbstractProtocol开始
信息:正在启动ProtocolHandler[“http-bio-11032”]
12月25日,13日下午6:16:45 org.apache.catalina.startup.catalina start
信息:服务器在21778毫秒内启动

如何解决这个问题?

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

因此,请尝试将其设置为
-Xm
-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set java thread stack size
-Xms64m -Xmx256m
locate catalina.sh

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

sudo vi /usr/share/tomcat7/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"