Recurring AsyncRequestTimeoutException in Spring Boot Admin log
Solution 1
I also had similar error. try this property in you application.yml
spring:
mvc:
async:
request-timeout: -1
Solution 2
Alternatively without spring boot, add
@Override
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
long timeout = 5 * 60 * 1000;// for example 5 minutes
WebMvcConfigurer.super.configureAsyncSupport(configurer);
configurer.setDefaultTimeout(timeout);
}
to the configuration class that implements WebMvcConfigurer
Solution 3
In case of using ComplatebleFuture<Any>
as return type of @RestController
function and using Tomcat as backing container.Then is required to register catalina Connector customizer into spring context, which will adjust async connection timeout. Because org.apache.catalina.connector.Connector
has its own property protected long asyncTimeout = 30000;
which is used as timeout for async request.
@Configuration
class TomcatAsyncConfig {
@Bean
fun asyncTimeoutCustomize(): TomcatConnectorCustomizer =
TomcatConnectorCustomizer { connector -> connector.asyncTimeout = 180000 }
}
Modifing values of
spring.mvc.async.request-timeout: -1
or server.tomcat.connection-timeout
won't do.
Martin
Updated on July 24, 2021Comments
-
Martin almost 3 years
I'm currently running Spring Boot Admin on my local machine for testing purposes and I'm getting the following error nonstop. The application itself seems to be working fine, but my logs are getting filled with these errors. I'm not sure why...
org.springframework.web.context.request.async.AsyncRequestTimeoutException: null at org.springframework.web.context.request.async.TimeoutDeferredResultProcessingInterceptor.handleTimeout(TimeoutDeferredResultProcessingInterceptor.java:42) ~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE] at org.springframework.web.context.request.async.DeferredResultInterceptorChain.triggerAfterTimeout(DeferredResultInterceptorChain.java:75) ~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE] at org.springframework.web.context.request.async.WebAsyncManager$5.run(WebAsyncManager.java:392) ~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE] at org.springframework.web.context.request.async.StandardServletAsyncWebRequest.onTimeout(StandardServletAsyncWebRequest.java:143) ~[spring-web-4.3.3.RELEASE.jar!/:4.3.3.RELEASE] at org.apache.catalina.core.AsyncListenerWrapper.fireOnTimeout(AsyncListenerWrapper.java:44) ~[tomcat-embed-core-8.5.5.jar!/:8.5.5] at org.apache.catalina.core.AsyncContextImpl.timeout(AsyncContextImpl.java:131) ~[tomcat-embed-core-8.5.5.jar!/:8.5.5] at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:157) ~[tomcat-embed-core-8.5.5.jar!/:8.5.5] at org.apache.coyote.AbstractProcessor.dispatch(AbstractProcessor.java:228) [tomcat-embed-core-8.5.5.jar!/:8.5.5] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:53) [tomcat-embed-core-8.5.5.jar!/:8.5.5] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) [tomcat-embed-core-8.5.5.jar!/:8.5.5] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) [tomcat-embed-core-8.5.5.jar!/:8.5.5] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.5.jar!/:8.5.5] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_40] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_40] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.5.jar!/:8.5.5] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_40]
-
James Monger over 7 yearsHi @VinodYadav, welcome to Stack Overflow. I've edited your answer to wrap your code in a code tag so that it's easier to read.
-
dilbertside over 7 yearsThanks @Vinod, that worked wonderfully. A repo example illustrate this problem [github.com/dilbertside/compose-spring-boot-admin ] remove the property and the AsyncRequestTimeoutException reappears.
-
Kamal Joshi over 7 yearsBeware of making the async timeout to -1, a few of these types of requests will hold on to a thread / socket and may cause starvation of resources if sufficiently large no. of requests are made.
-
André over 3 yearsyou can also declare the timeout as -1 to cancel timeout
-
lealceldeiro over 2 yearsThis is what would be called "Save the day"