【问题标题】:Tomcat 8 multipart requests taking longer to executeTomcat 8 多部分请求需要更长的时间来执行
【发布时间】:2021-07-23 20:47:04
【问题描述】:

我有一个托管在 tomcat 8 上的 spring boot 应用程序(war)。在我们的应用程序中,我们很少有 api 是多部分请求,其中一个 api 经常用于推送大小在 10 到 20kb 左右的文件.

随着请求的不断增长,tomcat 处理这些多部分请求的时间过长。我说它与 tomcat 相关,因为我在我的应用程序中启用了调试日志以及 spring 安全性,并且请求需要大约 200 毫秒来处理请求以及安全性。

我正在处理的请求来自另一个系统,该系统在任何情况下都只会发送 2 个请求,并且只会在收到响应后发送下一个请求。

在负载高峰期,这些请求总体上需要大约 20-30 秒的时间来响应。其中我的应用日志只有 200-300 毫秒。

我已经用默认设置配置了tomcat,只修改了连接器以使用NIO1和ssl。

这是我的连接器配置

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" sslProtocol="TLS" 
clientAuth="false" keystorePass="secret" keystoreType="PKCS12" 
keystoreFile="path_to_pfx" SSLEnabled="true" secure="true" scheme="https"
/>

有人遇到过这样的问题吗?我一直在查看 tomcat 文档和谷歌,但找不到任何线索。

我尝试增加池的缓冲区大小,但这也无济于事。

【问题讨论】:

    标签: java spring-boot tomcat multipartform-data tomcat8


    【解决方案1】:

    这是 Tomcat 文档的摘录:

    在此期间,每个传入请求都需要一个线程 要求。如果收到的同时请求多于可以 由当前可用的请求处理线程处理, 将创建额外的线程,直到配置的最大值( maxThreads 属性的值)。如果还要同时 请求被接收,它们被堆叠在服务器套接字中 由连接器创建,直到配置的最大值( acceptCount 属性)。任何进一步的同时请求将 收到“连接被拒绝”错误,直到资源可用 处理它们。

    一般来说,使用像 Nginx 这样的反向代理是一个很好的做法,因为慢速连接会大大降低您的应用程序的速度。 尽管我认为您的程序并非如此。

    我认为调试 Tomcat、启用调试日志级别甚至将 Tomcat 源代码添加到您的路径并在相关位置放置断点或使用像 NewRelic 这样的检测工具来查看您的部署中发生了什么是个好主意。

    【讨论】:

    • 感谢您的回复@jahan。我一直在使用弹性 APM 监控我的部署,但这对找到根本原因没有多大帮助。这个问题也是间歇性的,让我试试你建议的选项。谢谢。
    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多