Tomcat服务器导致大型有效负载损坏管道

问题描述 投票:1回答:1

我做了一个简单的spring-boot应用程序,它为所有请求返回静态json响应。

当应用程序获得具有大负载(~5mb json,1 TO)的请求时,客户端会收到以下错误:

java.net.SocketException: Broken pipe (Write failed)
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:155)

我尝试过增加每个限制 - 这是我的tomcat设置:

spring.http.multipart.max-file-size=524288000
spring.http.multipart.max-request-size=524288000
spring.http.multipart.enabled=true
server.max-http-post-size=10000000
server.connection-timeout=30000
server.tomcat.max-connections=15000
server.tomcat.max-http-post-size=524288000
server.tomcat.accept-count=10000
server.tomcat.max-threads=200
server.tomcat.min-spare-threads=200

如果只使用一个控制器来完成这个简单的弹簧启动,我能做些什么来成功处理这样的有效载荷?

这个春季启动应用程序和发送大型有效负载的客户端运行在一个16GB内存的8核机器上。所以资源应该不是问题。

apache spring-boot tomcat
1个回答
0
投票

这是因为控制器在不消耗请求体的情况下返回响应。因此,服务器在收到请求后立即关闭连接,而不会消耗完整的请求主体。客户端仍然没有完成发送请求,服务器在此之前关闭了连接。

解决方案:1。阅读代码中的完整请求正文2.将tomcat的maxSwallowSize设置为更高的值(默认值:2mb)server.tomcat.max-swallow-size = 10MB

© www.soinside.com 2019 - 2024. All rights reserved.