Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
Java tomcat中未捕获的ExceptionHandler_Java_Multithreading_Tomcat_Out Of Memory - Fatal编程技术网

Java tomcat中未捕获的ExceptionHandler

Java tomcat中未捕获的ExceptionHandler,java,multithreading,tomcat,out-of-memory,Java,Multithreading,Tomcat,Out Of Memory,在执行web应用程序时,tomcat源代码中的MemoryError出错 java.lang.OutOfMemoryError:java堆空间 java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) at java.lang.AbstractStri

在执行web应用程序时,tomcat源代码中的MemoryError出错

java.lang.OutOfMemoryError:java堆空间

java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at com.source.server.wc.common.SupportAction.execute(SupportAction.java:252)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.source.server.wc.common.AuthenticationFilter.doFilter(AuthenticationFilter.java:300)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.source.server.wc.common.EncodingFilter.doFilter(EncodingFilter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)    
我补充说 Thread.currentThread().setDefaultUncaughtExceptionHandler(新的OOMEHandler())在我的主线程中,现在我在从webclient执行任务时得到了OOMError,但是UncaughtExceptionHandler没有捕捉到OOMError


如何捕获它?

UncaughtExceptionHandler
还将捕获
OutOfMemoryError
。你似乎设置得很正确。因此,要么其他进程随后调用它(您可以通过设置函数的断点进行检查),要么TomCat在您的
线程上设置了自己的断点,您可以通过调用
线程.currentThread().getUncaughtExceptionHandler()
来检查。如果未设置,则返回
null

还请注意,
setDefaultExceptionHandler()
是静态的,因此不应在对象上调用它,而应在类上调用它,因此:

Thread.setDefaultUncaughtExceptionHandler(new OOMEHandler());
而不是

Thread.currentThread().setDefaultUncaughtExceptionHandler(new OOMEHandler());

您确定为其调用的
setDefaultUncaughtExceptionHandler
的同一线程也是发生
OutOfMemoryError
的线程吗?记住,Tomcat使用线程池;根据您的请求/响应周期的设计方式,这些线程最终可能是两个不同的线程。此外,java.lang.OutOfMemoryError是Throwable的子类型。我认为只有异常类型才会触发UncaughtExceptionHandler。尝试抛出RunTimeException以查看是否为真。@Isaac我已添加了异常跟踪,但不确定同一线程中是否出现OutOfMemoryError。如果线程由tomcat调用,那么如何捕获OutOfMemoryError?好的,现在在
thread.currentThread().set..
之后添加
new RuntimeException().printStackTrace()
,通过比较堆栈跟踪,您将能够看到两者是否起源于同一个线程。new RuntimeException().printStackTrace()给我一个jvm iinvoked(ie)设置Thread.currentThread().setDefaultUncaughtExceptionHandler(new OOMEHandler())的跟踪;在main类本身中,同一线程通过调用org.apache.catalina.startup.Bootstrap classThread.currentThread().getUncaughtExceptionHandler()返回java.lang.ThreadGroup[name=main,maxpri=10]来调用新线程来启动tomcat服务器,我在回答中出错,将修复它。这意味着没有设置,因此(如果可用)将调用默认值。这可能意味着您在错误的线程上调用它。您发布的stacktrace中是否有您自己的代码(看起来没有)com.source.server.wc.common.SupportAction.execute是我自己的代码,它是webclient类extends Action如果您刚刚发布的结果来自该函数,则将调用defaultUncaughtExceptionHandler。(为了验证,您可以尝试
Thread.getDefaultUncaughtExceptionHandler()
查看没有人取消设置您的线程)。请注意,
OutOfMemoryException
具有奇怪的副作用,因为如果您尝试在处理程序中创建许多新对象,它将再次抛出(而不会被捕获)。所以一般来说,你应该做的第一件事就是记录它。测试它是否正常工作的另一种方法是只抛出您自己的异常
抛出新异常(“测试处理程序”)