可以在外掛的配置文件application.properties中優化tomcat配置
在spring-configuration-metadata.json文件中相關tomcat配置
server.tomcat.accept-count:等待隊列長度,默認100
server.tomcat.max-connections:最大可連接數,默認10000
server.tomcat.max-threads:最大工作線程數,默認200
server.tomcat.min-spare-threads:最小工作線程數,默認10
server.tomcat.accesslog.enabled=true 開啟access日志
server.tomcat.accesslog.directory=/var/www//tomcat 日志存放的路徑
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D 日志格式為:請求的host主機地址,時間,方式,路徑,協議,狀態,返回字節數,處理時間
注意:默認配置下,連接數超過10000后出現拒接連接情況;觸發的請求超過200+100后拒絕處理
定制內嵌tomcat開發
相關參數:
keepAliveTimeOut:多少毫秒后不響應的斷開keepalive
maxKeepAliveRequests:多少次請求后keepalive斷開失效
keepAlive簡介:參考這里
優點: Keep-Alive功能使客戶端到服務器端的連接持續有效,當出現對服務器的后繼請求時,Keep-Alive功能避免了建立或者重新建立連接。,長連接能夠保證服務器和客戶端的socket能夠高效利用,減少握手等額外的開銷。
缺點:但是,對於負擔較重的網站來說,這里存在另外一個問題:雖然為客戶保留打開的連 接有一定的好處,但它同樣影響了性能,因為在處理暫停期間,本來可以釋放的資源仍舊被占用。當Web服務器和應用服務器在同一台機器上運行時,Keep-Alive功能對資源利用的影響尤其突出。
內嵌tomcat設置方法:
實現 WebServerFactoryCustomizer<ConfigurableWebServerFactory>
具體如下:
1 import org.apache.catalina.connector.Connector; 2 import org.apache.coyote.http11.Http11NioProtocol; 3 import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; 4 import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; 5 import org.springframework.boot.web.server.ConfigurableWebServerFactory; 6 import org.springframework.boot.web.server.WebServerFactoryCustomizer; 7 import org.springframework.stereotype.Component; 8 9 //當Spring容器中沒有TomcatEmbeddedServletContainerFactory這個bean時,會把此bean加載進容器 10 @Component 11 public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> { 12 13 @Override 14 public void customize(ConfigurableWebServerFactory factory) { 15 //使用工廠類定制tomcat connector 16 ((TomcatServletWebServerFactory)factory).addConnectorCustomizers(new TomcatConnectorCustomizer() { 17 @Override 18 public void customize(Connector connector) { 19 Http11NioProtocol protocol= (Http11NioProtocol) connector.getProtocolHandler(); 20 //設置30秒無響應則斷開keepalive 21 protocol.setKeepAliveTimeout(30000); 22 //設置最大10000次請求后則斷開keepalive 23 protocol.setMaxKeepAliveRequests(10000); 24 } 25 }); 26 } 27 }