一台测试环境的doker上部署的应用,在下载较大文件或并发下载量较大的时候,文件下载异常中止,浏览器没有明显的报错,但从文件大小上看是明显有缺失了。Springboot报错:
org.apache.catalina.connector.ClientAbortException: java.io.IOException: Connection reset by peer
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:393)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:426)
首先可以确定的是,浏览器端没理由reset connection,而Springboot又说不是它干的,是客户端干的。所以nginx成了重点怀疑对象。在查看nginx日志时,果然发现了下面的错误:
[crit] 630083#0: *783258 pwrite() "/dev/shm/nginx_temp/proxy/3/03/0000000033" failed (28: No space left on device) while reading upstream
客户端请求下载文件,springboot通过nginx把数据拿给客户端,springboot是nginx的upstream。upstream和nginx之间的通信速度是很快的,而客户端与nginx之间的速度较慢,nginx觉得没必要两方都跟客户端耗着,它从upstream快速拿完数据,就让upstream歇着了,自己慢慢跟客户端磨。
那些未被客户端接受的数据需要nginx自己记着&#