javascript
Springboot内置tomcat优化
目錄
一、spring-configuration-metadata.json內置tomcat優化
1、常用配置說明
2、springboot中的配置文件
二、keepalive鏈接設置
一、spring-configuration-metadata.json內置tomcat優化
1、常用配置說明
我們在使用springboot開發web項目時,大多數時候采用的是內置的Tomcat(當然也可以配置支持內置的jetty),內置Tomcat有什么好處呢?
針對目前的容器優化,可以從以下幾點考慮:
1、線程數??2、超時時間??3、JVM優化
首先,線程數是一個重點,每一次HTTP請求到達Web服務器,Web服務器都會創建一個線程來處理該請求,該參數決定了應用服務同時可以處理多少個HTTP請求。
比較重要的有兩個:初始線程數和最大線程數。
- 初始線程數:保障啟動的時候,如果有大量用戶訪問,能夠很穩定的接受請求。
- 最大線程數:用來保證系統的穩定性。
- 超時時間:用來保障連接數不容易被壓垮。如果大批量的請求過來,延遲比較高,很容易把線程數用光,這時就需要提高超時時間。這種情況在生產中是比較常見的 ,一旦網絡不穩定,寧愿丟包也不能把服務器壓垮。
min-spare-threads:最小備用線程數,tomcat啟動時的初始化的線程數。默認10
max-threads:Tomcat可創建的最大的線程數,每一個線程處理一個請求,超過這個請求數后,客戶端請求只能排隊,等有線程釋放才能處理。(建議這個配置數可以在服務器CUP核心數的200~250倍之間)默認200
accept-count:當調用Web服務的HTTP請求數達到tomcat的最大線程數時,還有新的HTTP請求到來,這時tomcat會將該請求放在等待隊列中,這個acceptCount就是指能夠接受的最大等待數,默認100。如果等待隊列也被放滿了,這個時候再來新的請求就會被tomcat拒絕(connection refused)。
max-connections:這個參數是指在同一時間,tomcat能夠接受的最大連接數。一般這個值要大于(max-threads)+(accept-count)。(最大線程數+排隊數)
connection-timeout:最長等待時間,如果沒有數據進來,等待一段時間后斷開連接,釋放線程。
2、springboot中的配置文件
spring-configuration-metadata.json文件中的tomcat配置信息
?對于具體配置類ServerProperties,我們可以看到對于tomcat的配置有很多,可以根據自己的需要進行選擇配置
操作:在spring boot配置文件中application.yml,添加以下配置
這塊對tomcat進行了一個簡單優化配置,最大工作線程數是800,最小工作線程是100,超時時間是3000ms;
# Tomcat server:tomcat:uri-encoding: UTF-8#最小線程數min-spare-threads: 100#最大線程數max-threads: 800#最大鏈接數max-connections: 10000#最大等待隊列長度accept-count: 1000#請求頭最大長度kbmax-http-header-size: 1048576#請求體最大長度kb、不限制 POST 大小需要將值設置為 -1max-http-post-size: 2097152#服務http端口port: 8090#鏈接建立超時時間connection-timeout: 3000servlet:#配置context-path,訪問時,需要在連接后加上配置的路徑 localhost:8888/servercontext-path: /server注:以上是4核8G服務器的經驗配置,合適的配置還需要根據具體的壓測結果來驗證
springboot內置tomcat優化其他參考文檔
spring boot (八) 內置tomcat配置和優化 - AlexZS - 博客園一、 在application.properties文件中配置 二、實現 WebServerFactoryCustomizer 接口 1、 2、 同時springboot支持jetty pom文件要加https://www.cnblogs.com/alomsc/articles/10841563.html
10-SpringBoot定制和優化內嵌Tomcat - Spring Boot 學習筆記 - 文江博客10.1 配置日志 10.1.1 在配置文件中配置 在application.properties中添加 server.tomcat.accesslog.enabled=true server.tomcat.accesslog.direct…https://www.wenjiangs.com/doc/8srgq76ySpringboot內置tomcat優化說明_GaoChenXi-CSDN博客修改springboot內置tomcatEmbeddedServletContainerCustomizer接口中的抽象方法有三個內置容器public interface EmbeddedServletContainerCustomizer {/** * Customize the specified {@link ConfigurableEmbeddedServletContaine...https://blog.csdn.net/gcxzflgl/article/details/80543540
Tomcat-8 性能監控及調優 - 破解孤獨 - 博客園一、下載地址 https://tomcat.apache.org/download-80.cgi 二、安裝步驟 將安裝包?apache-tomcat-8.5.39.tar.gz 上傳至服務器https://www.cnblogs.com/L-Test/p/10611126.html
二、keepalive鏈接設置
我們發現,spring-configuration-metadata.json文件中并沒有keepalive的相關配置參數,而合理的設置這個參數,往往能幫我們節省很多不必要的性能開銷,對于keepalive的設置,詳見一下代碼
/*** @author swadian* @date 2021/11/17* @Version 1.0* @describetion 當Spring容器內沒有TomcatEmbeddedServletContainerFactory這個bean時加載*/ @Component public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {@Overridepublic void customize(ConfigurableWebServerFactory configurableWebServerFactory) {//使用對應工廠類提供給我們的接口定制化我們的tomcat connector((TomcatServletWebServerFactory) configurableWebServerFactory).addConnectorCustomizers((connector) -> {Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();//定制化keepalivetimeout,設置30秒內沒有請求則服務端自動斷開keepalive鏈接protocol.setKeepAliveTimeout(30000);//當客戶端發送超過10000個請求則自動斷開keepalive鏈接protocol.setMaxKeepAliveRequests(10000);});} }總結
以上是生活随笔為你收集整理的Springboot内置tomcat优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: g++编译时的常用选项说明
- 下一篇: JS遍历map集合以及map对象