網站首頁 編程語言 正文
一般來說我們都是用tomcat默認的配置做基礎的本地開發,測試及生產肯定不用tomcat啦,正式一點的企業肯定換大型容器了,當然不排除還是用tomcat或者它的集群的,言歸正傳,tomcat的連接數相關配置及修改干貨如下:
在tomcat配置文件server.xml中的<Connector ?/>標簽配置中,和連接數相關的參數有下面幾個(如果你現在看肯定都沒有的):
- minProcessors------------------最小空閑連接線程數,用于提高系統處理性能,默認值為10
- maxProcessors-----------------最大連接線程數,即:并發處理的最大請求數,默認值為75
- acceptCount---------------------允許的最大連接數,應大于等于maxProcessors,默認值為100
- enableLookups-----------------是否反查域名,取值為:true或false。為了提高處理能力,應設置為false
- connectionTimeout------------網絡連接超時,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通常可設置為30000毫秒。
P.S.如果你要手動增加這些鏈接相關參數,那么根據以上參數肯定是找不到的,官方文檔提示需要搞另外兩個參數才能加大并發連接數,那就是maxProcessors和acceptCount。
官方原話及翻譯:
If more simultaneous requests are received than can be handled by the currently available request processing threads, additional threads will be created up to the configured maximum (the value of the maxThreads attribute).
如果接收到的并發請求比當前可用的請求處理線程所能處理的更多,則將創建額外的線程到配置的最大值(maxThreads 屬性)。
If still more simultaneous requests are received, they are stacked up inside the server socket created by the Connector, up to the configured maximum (the value of the acceptCount attribute).
如果接收到更多的并發請求,則它們被堆疊在由連接器創建的服務器套接字內,直到配置的最大值(acceptCount 屬性)。
所以需要設置的是maxThreads和acceptCount這兩個值,兩者的默認值分別是200和100,要調整Tomcat的默認最大連接數,可以增加這兩個屬性的值,并且使acceptCount大于等于maxThreads:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" acceptCount="300" maxThreads="200" />
并發請求數 <= tomcat最大線程數200,可以看到200個請求,響應結果正常
并發數(201) >tomcat最大線程數200.可以看到,因為tomcat最大的線程數為200,201的并發請求量,超出了并發處理的數量200,多出來的1個請求,需要等待某個處理中的請求處理完成
請求數超過最大連接數300,可以看到有大量的沒有正常響應的http請求,原因很簡單,因為超過了tomcat設置的最大連接數,服務器拒絕了該次請求的連接
增加線程是有成本的,JVM中默認情況下在創建新線程時會分配大小為1M的線程棧,所以更多的線程異味著更多的內存;
更多的線程會帶來更多的線程上下文切換成本。
springboot中Tomcat配置建議:
最大工作線程數 ,默認200(4核8G內存,線程數經驗值為800,操作系統之間做線程之間切換調度是有開銷的,不是越多越好),最大連接數默認是10000,等待長度默認為100,最小工作空閑線程默認10
線程數的經驗值為:1核2G內存, 線程數經驗值為200,;4核8G內存,線程數經驗值為800
原文鏈接:https://blog.csdn.net/csdn_avatar_2019/article/details/104323896
相關推薦
- 2023-03-22 教你利用Golang可選參數實現可選模式_Golang
- 2022-07-02 C#并行編程之數據并行Tasks.Parallel類_C#教程
- 2023-01-01 一文帶你弄懂Python3中的def?__init___python
- 2022-10-17 Python?Django源碼運行過程解析_python
- 2022-11-04 關于docker部署服務時ip無法訪問服務正常的問題_docker
- 2022-12-21 redis保存AtomicInteger對象踩坑及解決_Redis
- 2022-04-18 C語言?簡單粗暴的笨方法找水仙花數_C 語言
- 2023-02-18 Go?gin權限驗證實現過程詳解_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支