使用kill -9殺掉springboot應用后,立馬java -jar重啟,會報錯,需要等待一段時間才能啟動成功,
報錯的原因是:/tmp/tomcat-docbase.4749794910434376321.9086] is not valid
以下是詳細錯誤信息:
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@53001498]at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:158) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4831) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4963) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]... 7 moreCaused by: java.lang.IllegalArgumentException: The main resource set specified [/tmp/tomcat-docbase.4749794910434376321.9086] is not validat org.apache.catalina.webresources.StandardRoot.createMainResourceSet(StandardRoot.java:725) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:686) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:152) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4831) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4963) ~[tomcat-embed-core-8.5.4.jar!/:8.5.4]... 7 moremealtime-report-[15:48:37:716] [ERROR] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:181) - A child container failed during start
[root@localhost tmp]# ls -dlt tomcat*drwxr-xr-x 3 root root 4096 May 15 14:19 tomcat.2482651926943103152.4444drwxr-xr-x 2 root root 4096 May 15 14:19 tomcat-docbase.1606353072223048027.4444drwxr-xr-x 3 root root 4096 May 15 14:19 tomcat.6427937730432992105.4004drwxr-xr-x 2 root root 4096 May 15 14:19 tomcat-docbase.9014354490424152602.4004drwxr-xr-x 3 root root 4096 May 14 18:21 tomcat.365692316696650885.2000drwxr-xr-x 2 root root 4096 May 14 18:21 tomcat-docbase.8871210702020412482.2000drwxr-xr-x 3 root root 4096 May 14 18:21 tomcat.9194454391130879725.2222drwxr-xr-x 2 root root 4096 May 14 18:21 tomcat-docbase.6449009990528406178.2222drwxr-xr-x 3 root root 4096 May 11 16:31 tomcat.7533402776366547594.3333drwxr-xr-x 2 root root 4096 May 11 16:31 tomcat-docbase.8347169054078560101.3333drwxr-xr-x 3 root root 4096 May 11 16:31 tomcat.5755321441664547955.3004drwxr-xr-x 2 root root 4096 May 11 16:31 tomcat-docbase.4368794759444711233.3004drwxr-xr-x 3 root root 4096 May 11 16:31 tomcat.7487101127514666304.4444drwxr-xr-x 2 root root 4096 May 11 16:31 tomcat-docbase.3505389582011000978.4444drwxr-xr-x 3 root root 4096 May 11 16:30 tomcat.6483749742824168608.4004drwxr-xr-x 2 root root 4096 May 11 16:30 tomcat-docbase.2936863713994400124.4004drwxr-xr-x 3 root root 4096 May 11 16:30 tomcat.8814016287852028090.2000drwxr-xr-x 2 root root 4096 May 11 16:30 tomcat-docbase.5759661693624441557.2000drwxr-xr-x 3 root root 4096 May 11 16:30 tomcat.3084296173620137759.2222drwxr-xr-x 2 root root 4096 May 11 16:30 tomcat-docbase.2913734529869658765.2222drwxr-xr-x 3 root root 4096 May 11 16:30 tomcat.1261539854295462589.3333drwxr-xr-x 2 root root 4096 May 11 16:30 tomcat-docbase.4327066414867055940.3333drwxr-xr-x 3 root root 4096 May 11 16:30 tomcat.1652439996406851728.3004drwxr-xr-x 2 root root 4096 May 11 16:30 tomcat-docbase.5233226104416503892.3004drwxr-xr-x 3 root root 4096 May 11 11:38 tomcat.8505864110333115533.3333drwxr-xr-x 2 root root 4096 May 11 11:38 tomcat-docbase.5036544091928181133.3333drwxr-xr-x 3 root root 4096 May 11 11:37 tomcat.494020510980868278.3004drwxr-xr-x 2 root root 4096 May 11 11:37 tomcat-docbase.468265602651303178.3004drwxr-xr-x 3 root root 4096 May 11 11:36 tomcat.8093369488059063930.3004drwxr-xr-x 2 root root 4096 May 11 11:36 tomcat-docbase.7679645853200594654.3004drwxr-xr-x 3 root root 4096 May 11 11:31 tomcat.5040740781547956399.4444drwxr-xr-x 2 root root 4096 May 11 11:31 tomcat-docbase.8256790475295084303.4444drwxr-xr-x 3 root root 4096 May 11 11:31 tomcat.7344112750169248130.4004drwxr-xr-x 2 root root 4096 May 11 11:31 tomcat-docbase.2016044219412775812.4004drwxr-xr-x 3 root root 4096 May 11 11:30 tomcat.3866209351076068036.4444
SpringBoot測試版本
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
SpringBoot默認使用的是Tomcat作為web server
springboot中默認可以通過配置如下參數(shù)設(shè)置內(nèi)嵌容器Tomcat的端口,最大線程數(shù)等等
server.port=8081server.tomcat.max-threads=1000
但是,無法設(shè)置最大連接數(shù),而最大連接數(shù)直接影響到Tomcat的性能,如何調(diào)整這個最大連接數(shù)呢?
以下有三種方法
一:
import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11NioProtocol; import org.springframework.boot.context.embedded.EmbeddedServletContainer; import org.springframework.boot.context.embedded.ServletContextInitializer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.stereotype.Component; @Component() public class MyEmbeddedServletContainerFactory extends TomcatEmbeddedServletContainerFactory { public EmbeddedServletContainer getEmbeddedServletContainer(ServletContextInitializer... initializers) { //設(shè)置端口 this.setPort(8081); return super.getEmbeddedServletContainer(initializers); } protected void customizeConnector(Connector connector) { super.customizeConnector(connector); Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler(); //設(shè)置最大連接數(shù) protocol.setMaxConnections(2000); //設(shè)置最大線程數(shù) protocol.setMaxThreads(2000); protocol.setConnectionTimeout(30000); } }
二:
import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11NioProtocol; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class WebServerConfiguration { @Bean public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory() { TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory(); tomcatFactory.setPort(8081); tomcatFactory.addConnectorCustomizers(new MyTomcatConnectorCustomizer()); return tomcatFactory; } } class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer { public void customize(Connector connector) { Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); //設(shè)置最大連接數(shù) protocol.setMaxConnections(2000); //設(shè)置最大線程數(shù) protocol.setMaxThreads(2000); protocol.setConnectionTimeout(30000); } }
三:
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class WebServerConfiguration { @Bean public EmbeddedServletContainerCustomizer createEmbeddedServletContainerCustomizer() { return new MyEmbeddedServletContainerCustomizer(); } } class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { public void customize(ConfigurableEmbeddedServletContainer container) { TomcatEmbeddedServletContainerFactory tomcatFactory = (TomcatEmbeddedServletContainerFactory)container; tomcatFactory.setPort(8081); //下面的操作可以參照上面的方法 } }
最后,如果發(fā)現(xiàn)沒有生效,就把application.properties配置里面關(guān)于Tomcat的一些配置(server.*)全部刪掉,就OK了。
http://blog.csdn.net/mn960mn/article/details/51306140