Tomcat崩溃,错误为java.lang.OutOfMemoryError:超出GC开销限制
在tomcat运行了几个月之后,我意外地发现了下面的错误。 我们重新启动了tomcat,错误现在没有出现,但将来可能会再次出现。 我看到另一个用户有类似的异常,与垃圾收集相关,但与NIO连接器不完全相关 是否有人知道为什么会发生这种情况,以及应该采取什么正确的措施来避免这种情况Tomcat崩溃,错误为java.lang.OutOfMemoryError:超出GC开销限制,java,tomcat,garbage-collection,atmosphere,Java,Tomcat,Garbage Collection,Atmosphere,在tomcat运行了几个月之后,我意外地发现了下面的错误。 我们重新启动了tomcat,错误现在没有出现,但将来可能会再次出现。 我看到另一个用户有类似的异常,与垃圾收集相关,但与NIO连接器不完全相关 是否有人知道为什么会发生这种情况,以及应该采取什么正确的措施来避免这种情况 Jan 15, 2016 7:46:47 AM org.apache.tomcat.util.net.NioEndpoint$SocketProcessor run SEVERE: java.lang.OutOfMem
Jan 15, 2016 7:46:47 AM org.apache.tomcat.util.net.NioEndpoint$SocketProcessor run
SEVERE:
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Collections.synchronizedSet(Collections.java:1691)
at org.atmosphere.cpr.AtmosphereRequest$Builder.<init>(AtmosphereRequest.java:1146)
at org.atmosphere.cpr.AtmosphereRequest.wrap(AtmosphereRequest.java:1891)
at org.atmosphere.cpr.AtmosphereServlet.event(AtmosphereServlet.java:295)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilterEvent(ApplicationFilterChain.java:484)
at org.apache.catalina.core.ApplicationFilterChain.doFilterEvent(ApplicationFilterChain.java:377)
at org.apache.catalina.core.StandardWrapperValve.event(StandardWrapperValve.java:411)
at org.apache.catalina.core.StandardContextValve.event(StandardContextValve.java:146)
at org.apache.catalina.valves.ValveBase.event(ValveBase.java:224)
at org.apache.catalina.core.StandardHostValve.event(StandardHostValve.java:256)
at org.apache.catalina.valves.ValveBase.event(ValveBase.java:224)
at org.apache.catalina.valves.ValveBase.event(ValveBase.java:224)
at org.apache.catalina.core.StandardEngineValve.event(StandardEngineValve.java:138)
at org.apache.catalina.connector.CoyoteAdapter.event(CoyoteAdapter.java:210)
at org.apache.coyote.http11.Http11NioProcessor.event(Http11NioProcessor.java:124)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1690)
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:744)
2016年1月15日上午7:46:47 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor运行
严重:
java.lang.OutOfMemoryError:超出GC开销限制
位于java.util.Collections.synchronizedSet(Collections.java:1691)
位于org.atmosphere.cpr.AtmosphereRequest$Builder(AtmosphereRequest.java:1146)
位于org.atmosphere.cpr.AtmosphereRequest.wrap(AtmosphereRequest.java:1891)
位于org.atmosphere.cpr.AtmosphereServlet.event(AtmosphereServlet.java:295)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilterEvent(ApplicationFilterChain.java:484)
位于org.apache.catalina.core.ApplicationFilterChain.doFilterEvent(ApplicationFilterChain.java:377)
位于org.apache.catalina.core.StandardWrapperValve.event(StandardWrapperValve.java:411)
位于org.apache.catalina.core.StandardContextValve.event(StandardContextValve.java:146)
位于org.apache.catalina.valves.ValveBase.event(ValveBase.java:224)
位于org.apache.catalina.core.StandardHostValve.event(StandardHostValve.java:256)
位于org.apache.catalina.valves.ValveBase.event(ValveBase.java:224)
位于org.apache.catalina.valves.ValveBase.event(ValveBase.java:224)
位于org.apache.catalina.core.StandardEngineValve.event(StandardEngineValve.java:138)
位于org.apache.catalina.connector.CoyoteAdapter.event(CoyoteAdapter.java:210)
位于org.apache.coyote.http11.Http11NioProcessor.event(Http11NioProcessor.java:124)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
位于org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1690)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:744)
您的服务器没有足够的内存来管理某些特别消耗内存的任务,或者内存泄漏
-Xmx
和-Xms
VM参数更改tomcat的内存设置,请参阅堆转储
,例如jmap -dump:file=<file-name> <process-id>
jmap-dump:file=
这里,
是您要创建的文件,
是Tomcat进程的id
一些工具,如,可以打开和分析堆转储文件,按类告诉您对象的数量,按对象类型占用的内存,内存泄漏怀疑,等等…OPTION 1 CATALINA.BAT
如果您是从以下窗口运行Tomcat:
然后,您应该创建一个文件setenv.bat
,并添加以下行:
set JAVA_OPTS="-Xms4096m -Xmx4096m"
选项2 CATALINA.SH
如果您是从以下位置(Linux)运行Tomcat:
然后,您必须执行类似的操作并创建setenv.sh,添加如下内容:
export JAVA_OPTS="-Xms4096m -Xmx4096m"
另见
选项3 TOMCAT服务
如果您是从使用Tomcat安装程序安装的Windows服务运行Tomcat,请转到Windows命令提示符并运行类似的命令(这是针对Tomcat 8的命令,可以在类似于C:\Program Files\Apache Software Foundation\Tomcat 8.0\bin的命令中找到):
在Java
选项卡下,您将看到初始内存池
和最大内存池
。在这两个字段中输入:
4096
单击Apply
和OK
从任务管理器
,服务
选项卡,服务
,选择Apache Tomcat
,然后按开始
另请参见和我计划尝试的第二点,以检测问题。关于应用程序,它在出现问题的服务器上的用户、活动等负载非常低。所以我想标准内存设置应该足够了。嗨@Scott,如果我在Amazon ElastiC Beanstalk服务器上运行tomcat呢?我也遇到了同样的问题,我重新启动了服务器,一切正常……嗨,斯科特,你真是个救世主。你不知道。谢谢。
export JAVA_OPTS="-Xms4096m -Xmx4096m"
Tomcat8w.exe
4096