当前位置: 首页 > 知识库问答 >
问题:

Spring boot+tomcat 8.5+mongoDB、AsyncRequestTimeoutException

潘安平
2023-03-14

我已经创建了一个spring boot web应用程序,并将相同的war部署到tomcat容器中。应用程序使用异步连接连接到MongoDB。为此,我使用mongodb-driver-async库。

刚开始的时候一切都很好。但一旦负载增加,就会在DB连接中显示以下异常

org.springframework.web.context.request.async.AsyncRequestTimeoutException: null
        at org.springframework.web.context.request.async.TimeoutDeferredResultProcessingInterceptor.handleTimeout(TimeoutDeferredResultProcessingInterceptor.java:42)
        at org.springframework.web.context.request.async.DeferredResultInterceptorChain.triggerAfterTimeout(DeferredResultInterceptorChain.java:75)
        at org.springframework.web.context.request.async.WebAsyncManager$5.run(WebAsyncManager.java:392)
        at org.springframework.web.context.request.async.StandardServletAsyncWebRequest.onTimeout(StandardServletAsyncWebRequest.java:143)
        at org.apache.catalina.core.AsyncListenerWrapper.fireOnTimeout(AsyncListenerWrapper.java:44)
        at org.apache.catalina.core.AsyncContextImpl.timeout(AsyncContextImpl.java:131)
        at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:157)

我正在使用以下版本的软件:

    null

附注:我正在使用deferredresult和CompletableFuture创建异步REST API。

我还尝试在应用程序中使用spring.mvc.async.request-timeout,并在Tomcat中配置了asyntimeout。但仍然得到相同的错误。

共有1个答案

乐正翰
2023-03-14

很明显,Spring正在超时请求,并抛出AsyncRequestTimeoutException,它将503返回给客户机。

现在的问题是,为什么会出现这种情况?有两种可能。

>

  • 这些是合法超时。您提到只在服务器负载增加时才会看到异常。因此,您的服务器可能无法处理该负载,其性能已经下降到某些请求在Spring超时之前无法完成的程度。

    • 垃圾回收器是否一直运行?
    • 是否所有CPU都固定在100%?
    • 操作系统交换严重吗?
    • 如果数据库服务器位于单独的计算机上,该计算机是否显示资源耗尽的迹象?
    • 有多少个连接打开到数据库?如果有连接池,它是否已满?
    • 有多少线程正在运行?如果服务器中有线程池,它们是否已达到极限?

    如果某个东西处于极限状态,那么可能是瓶颈导致请求超时。

    尝试将spring.mvc.async.request-timeout设置为-1,看看会发生什么。您现在是每个请求都得到响应,只是很慢,还是有些请求似乎永远挂起?如果是后者,则强烈表明服务器中存在错误,导致它无法跟踪请求并无法发送响应。(如果设置spring.mvc.async.request-timeout似乎没有效果,那么您接下来应该调查的是用于设置配置的机制是否实际有效。)

  •  类似资料:
    • 本文向大家介绍详解springboot整合mongodb,包括了详解springboot整合mongodb的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍springboot如何整合MongoDB。 准备工作 安装 MongoDB jdk 1.8 maven 3.0 idea 环境依赖 在pom文件引入spring-boot-starter-data-mongodb依赖: 数据源配置 如

    • 我正在尝试使用@Query注释从Spring Boot MongoRepository执行一个复杂的GeoQuery。以下是我的文档: 我需要我的查询执行以下任务: null

    • 我在GET api中有多个查询参数(如姓名、年龄、性别、位置等…n个数字)。现在我需要使用这些查询值来查询我的mongo数据库。现在用户可以发送从0到n的查询参数。 我正在尝试使用类似的东西 或者 但问题是,考虑到用户可以发送的所有排列和组合,我将不得不编写多个查询。有没有更好的方法来做到这一点?

    • 我试图使用docker compose来运行我的Springboot REST API,它使用Mongo作为数据库,但我收到了以下错误。有人能帮我解决这个问题吗? 当我的Spring启动应用程序试图通过Docker容器连接到MongoDB时,它会给我带来问题。Spring Boot似乎无法连接到端口27017上的MongoDB。 下面是部分代码和异常。 DockerFile Docker-Comp

    • 查询:{“日期”:{“$GTE”:“2021-07-22T03:00:00”,“$LTE”:“2021-07-23T03:00:00”},“isdeleted”:false},字段:{},排序:{} 将字符串转换为数据格式,如下所示,我只得到时间戳 DateFormat originalFormatData=new SimpleDateFormat(“yyyy-mm-dd't'hh:mm:ss”,

    • 本文向大家介绍Java springboot Mongodb增删改查代码实例,包括了Java springboot Mongodb增删改查代码实例的使用技巧和注意事项,需要的朋友参考一下 1、添加依赖 复制代码 完整pom.xm文件 2、applicaiton.yml 3、Mongodb增删改查 github地址:https://github.com/812406210/vue-demo.git

    • 我正在使用Spring引导应用程序连接MongoDB实例。我们已在MongoDB上启用了以下角色的身份验证 角色:[ { role: "dbOwner ",db: "{{ mongo.database_name }}" } 角色:[ { role: "readWrite ",db: "{{ mongo.database_name }}" } 我们使用conf文件提供凭证 数据: mongodb。u

    • 我在mongodb收集了以下数据: 集合名称:runState 我希望在过去的12个月(2021年1月至2022年1月)中,每个完成任务的产品的输出都算数(产品可从product_action获得) 输出应采用以下格式: 我已经从下面开始了,但不知道如何像上面那样计算月份。 由于这对我来说是新的,有人能帮我使用mongo DB查询来获得结果,并在Java springboot中编写代码来实现这一点