最近测试提了个bug ,说批量图片上传会返回500 错误。然后我弄了两个zip 压缩包一个3MB ,一个120MB ,发现3MB 的压缩包每次上传都没问题,而120MB 的每次上传都会报500 ,于是上spring cloud gateway 网关查看了下日志,发现网关报了一个莫名奇妙的错误
Connection prematurely closed BEFORE response
意思为连接在响应前过早关闭了。显得莫名奇妙,然后拿着这个报错百度google 了一番,没找到答案,于是换个方向。小文件没有问题,而大文件出问题,那么会不会是spring cloud gateway 不支持大文件上传?然后到官方找对应issue ,果然找到了一个类似的issue 是17年的。dose gateway support large file transfer ,然而并未找到答案。又去问了下测试,以前可不可以,测试说,以前是正常的。就是这段时间不行的。原因是这个接口改动了。然后本地起项目调试了下,发现一切正常。然后又测试了下测试环境的,发现每次返回这个错误的时候,相关服务就宕机重启了。好吧,去看下pod的状态
kubectl -n test describe po/xxxx
查看Last Error 为OOMKiller ,莫名奇妙,文件上传怎么会oom呢?然后去看了下相关配置 k8s 的配置
resources:
limits:
cpu: 2
memory: "4Gi"
requests:
cpu: 2
memory: "4Gi"
jvm配置
"-Xms4096m -Xmx4096m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m
我的天,开发在部署项目的时候啥都不看的,这样配置肯定导致native memory不足啊。接着又去看了下代码。 所以里面调整下参数,预留500MB给native重启下,在测试下,果断就好了。 所以部署项目的时候还是要稍微注意下此类问题。不然排查问题又要老半天。
|