Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat崩溃,错误为java.lang.OutOfMemoryError:超出GC开销限制_Java_Tomcat_Garbage Collection_Atmosphere - Fatal编程技术网

Tomcat崩溃,错误为java.lang.OutOfMemoryError:超出GC开销限制

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

在tomcat运行了几个月之后,我意外地发现了下面的错误。 我们重新启动了tomcat,错误现在没有出现,但将来可能会再次出现。 我看到另一个用户有类似的异常,与垃圾收集相关,但与NIO连接器不完全相关

是否有人知道为什么会发生这种情况,以及应该采取什么正确的措施来避免这种情况

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的内存设置,请参阅
  • 本主题展示了Tomcat的完整示例:

  • 对于第二种情况,您应该创建一个
    堆转储
    ,例如
  • 堆转储文件表示java进程的当前堆分配

    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