详解SpringBoot中的tomcat优化和修改
项⽬背景
在做项⽬的时候,把SpringBoot的项⽬打包成安装包了,在客户上⾯安装运⾏,⼀切都是那么的完美,可是发⽣了意外,对⽅突然说导出导⼊的⽂件都不⾏了。我急急忙忙的查看⽇志,发现报了⼀个错误
java.io.IOException: The temporary upload location [C:\Windows\Temp\tomcat.1351070438015228346.8884\work\Tomcat\localhost\ROOT] is not valid  at org.tor.Request.parseParts(Request.java:2821)
at org.tor.Request.parseParameters(Request.java:3185)
at org.Parameter(Request.java:1116)
at org.Parameter(RequestFacade.java:381)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:84)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.tor.CoyoteAdapter.service(CoyoteAdapter.java:343)
at http11.Http11Processor.service(Http11Processor.java:408)
at AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)
at at.util.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
at at.util.SocketProcessorBase.run(SocketProcessorBase.java:49)
at urrent.ThreadPoolExecutor.runWorker(Unknown Source)
at urrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at at.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
经过分析发现,这是tomcat在启动的时候会⽣成⼀个临时的上传⽂件保存的位置,但是这个位⼦默认是放在系统的临时⽂件夹中。当这个tomcat创建的⽂件夹被系统删除后,这时在上传⽂件就出现问题了。可能对⽅服务器装上了360管家,会⾃动删掉好似
开⼯
针对这⼀个异常有以下解决⽅法
1.万能的重启,绝⼤多数的问题解决⽅法,“你重启⼀下试试”。但是这个⽅法只能解决得了⼀时,解决不了⼀世啊。
2.在配置⽂件中加上
3.启动jar包的时候加上参数 -pdir=⾃定义⽬录
java -jar xx.jar -pdir=⾃定义⽬录
spring framework组件
4.添加配置bean
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import t.annotation.Bean;
import t.annotation.Configuration;
import javax.servlet.MultipartConfigElement;
@Configuration
public class TomcatBeanConfig {
/**
* ⽂件上传临时路径
*/
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation("⾃定义⽬录");
ateMultipartConfig();
}
}
-------------------------------------分隔符 ------------------------------------------
接着说优化,⾄于优化,我在解决上⾯的问题发现,tomcat中有⼀个配置
# 后台线程⽅法的delay⼤⼩每隔900s清除过期的session会话
默认值是10,每隔10s发⽣⼀次young gc,并且CPU使⽤率长期⼤于10%。
ContainerBackgroundProcessor这个线程是⼲什么的?
Tomcat的Engine会启动⼀个线程(就是ContainerBackgroundProcessor),该线程每10s会发送⼀个发送⼀个事件,监听到该事件的部署配置类会⾃动去扫描webapp⽂件夹下的war包,将其加载成⼀个Context,即启动⼀个web服务。同时,该线程还会调⽤⼦容器Engine、Host、Context、Wrapper各容器组件及与它们相关的其它组件的backgroundProcess⽅法。
个⼈理解是,每隔10S对session的过期清理过于频繁从⽽导致CPU占⽤率过⾼,
我改成了900,就是每900秒检测⼀次,这样就降低CPU占⽤率啦
backgroundProcess对spring mvc的影响
主要影响session的过期清理,如果设置为900,
就只会每隔900s清除过期的session会话。
#调⽤backgroundProcess⽅法之间的延迟。如果未指定持续时间后缀,则将使⽤秒。
到此这篇关于详解SpringBoot中的tomcat优化和修改的⽂章就介绍到这了,更多相关SpringBoot tomcat优化和修改内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。