Spring Boot配置内置Tomcat的maxPostSize值

简介: Spring Boot配置内置Tomcat的maxPostSize值

ZL~%4Y_`L6AN6$X@)`Q~O7Q.png

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情


Background


前端页面表单输入数据较多,包含多个文本、多张图片,在数据未压缩的情况下,最终上传失败。


Problem 1


后端报错:


java.lang.IllegalStateException: The multi-part request contained parameter data (excluding uploaded files) that exceeded the limit for maxPostSize set on the associated connector


即:请求数据量过大,超出了最大阈值。


  • Solution:

修改Spring Boot内置Tomcat的maxPostsize值,在application.yml配置文件中添加以下内容:


server:  
  tomcat:
    max-http-post-size: -1

Note: 以下配置并不能解决Tomcat请求数据量的限制问题


spring:
  servlet:
    multipart:
      max-file-size: 30Mb
      max-request-size: 100Mb

Problem 2


解决了应用服务器请求数据量过大问题后,在下一步写入DB时又遇到了类似问题,超出了数据库中最大允许数据包默认配置值。


Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (16800061 > 16777216). You can change this value on the server by setting the max_allowed_packet' variable.

  • Solution:

修改DB的max_allowed_packet值:


USE demo;
set global max_allowed_packet = 3*1024*1024*10; # 改为30M
show VARIABLES like '%max_allowed_packet%'; # 重启DB连接生效

Note:MySQLmax_allowed_packet 的 默认配置:16777216 = 16 * 1024 * 1024,即16M


Problem3


环境:Linux VM_43_129_centos 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux


Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Model name:            Intel(R) Xeon(R) CPU E5-26xx v3
Stepping:              2
CPU MHz:               2294.686
BogoMIPS:              4589.37
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0,1
  • Tomcat 启动报错,查看日志:

There is insufficient memory for the Java Runtime Environment to continue.


I%9]YYYLVE498[6OC7C2B7Y.png

内存不够用了!。?,可是,那可是8个G呀~

  • free -h 查看内存使用情况:


YH)20A_RCJ%U~(2[NG%0`F6.png

可用内存仅剩550M!

Analysis


因为服务器上除了Java环境,MQMySQL服务外,基本没其他的主要服务了,怀疑是Tomcat没有关闭导致;

  • ps -ef |grep tomcat 查看Tomcat相关进程:

S8Y__TE24OF60~`R0B}T16V.png

可以看到,Tomcat仍有多个进程在运行。


Solution


手动kill对应的pid,再次 free -h 查看内存使用情况:


T[4FKC6JHLIV7{RKN0G71)B.png

可用内存瞬间恢复,尝试启动Tomcat,成功~

至于为何Tomcat在shutdown后依然有进程在运行,这个还需进一步探讨。


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

目录
相关文章
|
30天前
|
网络协议 Java 应用服务中间件
tomcat配置域名及HTTPS
tomcat配置域名及HTTPS
|
14天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
88 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
1天前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
1天前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
2天前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
消息中间件 缓存 监控
75 0
|
15天前
|
Java 数据库连接 Maven
Spring基础1——Spring(配置开发版),IOC和DI
spring介绍、入门案例、控制反转IOC、IOC容器、Bean、依赖注入DI
Spring基础1——Spring(配置开发版),IOC和DI
|
26天前
|
IDE Java 开发工具
还在为繁琐的配置头疼吗?一文教你如何用 Spring Boot 快速启动,让开发效率飙升,从此告别加班——打造你的首个轻量级应用!
【9月更文挑战第2天】Spring Boot 是一款基于 Spring 框架的简化开发工具包,采用“约定优于配置”的原则,帮助开发者快速创建独立的生产级应用程序。本文将指导您完成首个 Spring Boot 项目的搭建过程,包括环境配置、项目初始化、添加依赖、编写控制器及运行应用。首先需确保 JDK 版本不低于 8,并安装支持 Spring Boot 的现代 IDE,如 IntelliJ IDEA 或 Eclipse。
81 5
|
28天前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
45 0
|
28天前
|
Java Spring 开发者
Spring 框架配置属性绑定大比拼:@Value 与 @ConfigurationProperties,谁才是真正的王者?
【8月更文挑战第31天】Spring 框架提供 `@Value` 和 `@ConfigurationProperties` 两种配置属性绑定方式。`@Value` 简单直接,适用于简单场景,但处理复杂配置时略显不足。`@ConfigurationProperties` 则以类级别绑定配置,简化代码并更好组织配置信息。本文通过示例对比两者特点,帮助开发者根据具体需求选择合适的绑定方式,实现高效且易维护的配置管理。
34 0