java - tomcat中的UncaughtExceptionHandler

标签 java multithreading tomcat out-of-memory

我在执行我的网络应用程序时在 tomcat 源代码中遇到 OutOfMemoryError。

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(new OOMEHandler()); 在我的主线程中,现在我在从 webclient 执行任务时遇到 OOMError,但 OOMError 未被 UncaughtExceptionHandler 捕获。

我怎样才能捕获它?

最佳答案

UncaughtExceptionHandler也会 catch OutOfMemoryError .您似乎正在正确设置它。所以要么其他进程在之后调用它(您可以通过设置函数的断点来检查),或者 TomCat 有自己的一个设置在您的 Thread 上。 ,您可以通过调用 Thread.currentThread().getUncaughtExceptionHandler() 来检查.这将返回 null如果没有设置。

另请注意 setDefaultExceptionHandler()是静态的,所以你不应该在对象上调用它,而是在类上调用它,所以:

Thread.setDefaultUncaughtExceptionHandler(new OOMEHandler());

代替

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

关于java - tomcat中的UncaughtExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718116/

相关文章:

java - Android 开发 - GestureDetector.OnGestureListener 或 GestureDetector.SimpleOnGestureListener

java - 读取 persistence.xml 文件中的环境变量

java - 将 Scalatest 包含在 Java 中时 Maven 构建失败

multithreading - 软件线程是否包括用户线程?

java - 将 HTML 登陆页面集成到 Hybris 或将 URL 重定向到另一台服务器

eclipse - 无法使用 Tomcat 运行 Servlet,因为某些东西正在使用端口

java - 如何在Java中将全角日语字符转换为半角日语字符?

c# - 无法理解为什么我会收到 NullReferenceException

即使使用 SwingWorker,Java GUI 也会卡住

java - 无法打开 http ://localhost:8080/when Tomcat is running in Eclipse