1.概述
在表单上传时,附件大小会影响到程序能否正常工作。这里有很多因素:
- nginx 附件大小限制。
- 程序大小限制。
- JVM堆内存限制。
2. 报错分析
2.1 413 Request Entity Too Large
这个错误一般是,nginx抛出的,需要修改配置后,杀死nginx进程重启。这个时候请求还在nginx,请求还没有转发到后端。
2.2 server interal error
这个一般是是程序大小有限制,需要更改nacos 参数。这个时候请求还在开发框架上,还没有到达我们的程序。
2.3 heap outofmemory
这个是请求到达了我们的程序,原因是堆内存不足。
3.针对上面提到的因素
3.1 nginx 配置
增加配置 client_max_body_size 500M;
后面时限制文件的最大大小。
nginx 这个配置可以在几个地方添加,分别代表不同的作用域。
- 在http 增加
http {
include mime.types;
default_type application/octet-stream;
client_max_body_size 500M;
- 在server下增加
server {
listen 80;
client_max_body_size 500M;
#server_name localhost;
- 在 location 下增加
location /api/ {
proxy_set_header Host $host;
proxy_set_header developer ray;
proxy_pass http://127.0.0.1:9900/;
client_max_body_size 500M;
}
3.2 在程序下增加
我们可以修改微服务 的 application.yml
spring:
servlet:
multipart:
#maxFileSize 是单个文件大小
#maxRequestSize是设置总上传的数据大小
max-file-size: 50MB
max-request-size: 50MB
我们也可以在nacos中配置 nacos-config-dev.properties
增加
# 单个文件大小
spring.servlet.multipart.max-file-size= 200MB
# 总的请求数大小
spring.servlet.multipart.max-request-size= 200MB
这里的优先级比上面在 application.yml 更高。
3.3 JVM堆内存的配置
如果程序配置的堆内存太小,就会出现堆内存溢出,因此需要配置合适大小的内存。
比如 :
-Xms2g -Xmx2g
文档更新时间: 2021-08-04 15:29 作者:zyg