1.概述

在表单上传时,附件大小会影响到程序能否正常工作。这里有很多因素:

  1. nginx 附件大小限制。
  2. 程序大小限制。
  3. 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 这个配置可以在几个地方添加,分别代表不同的作用域。

  1. 在http 增加
http {
    include       mime.types;
    default_type  application/octet-stream;
    client_max_body_size 500M;
  1. 在server下增加
server {
        listen       80;
        client_max_body_size 500M;
        #server_name  localhost;
  1. 在 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