springboot內嵌tomcat優化


可以在外掛的配置文件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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM