Tomcat服务器导致大负载管道中断

时间:2019-04-18 06:46:53

标签: apache spring-boot tomcat

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

当应用程序收到有效负载较大的请求(〜5mb json,1 TP)时,客户端会收到以下错误:

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

我该怎么做才能仅用一个控制器进行这种简单的弹簧引导,以成功处理此类有效载荷?

此springboot应用程序和发送大型有效负载的客户端在具有16GB内存的8核机器上运行。因此资源应该不是问题。

1 个答案:

答案 0 :(得分:0)

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

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