tomcat默認(rèn)最大連接數(shù)與調(diào)整的方法示例
一般來說我們都是用tomcat默認(rèn)的配置做基礎(chǔ)的本地開發(fā),測(cè)試及生產(chǎn)肯定不用tomcat啦,正式一點(diǎn)的企業(yè)肯定換大型容器了,當(dāng)然不排除還是用tomcat或者它的集群的,言歸正傳,tomcat的連接數(shù)相關(guān)配置及修改干貨如下:
在tomcat配置文件server.xml中的<Connector />標(biāo)簽配置中,和連接數(shù)相關(guān)的參數(shù)有下面幾個(gè)(如果你現(xiàn)在看肯定都沒有的):
- minProcessors------------------最小空閑連接線程數(shù),用于提高系統(tǒng)處理性能,默認(rèn)值為10
- maxProcessors-----------------最大連接線程數(shù),即:并發(fā)處理的最大請(qǐng)求數(shù),默認(rèn)值為75
- acceptCount---------------------允許的最大連接數(shù),應(yīng)大于等于maxProcessors,默認(rèn)值為100
- enableLookups-----------------是否反查域名,取值為:true或false。為了提高處理能力,應(yīng)設(shè)置為false
- connectionTimeout------------網(wǎng)絡(luò)連接超時(shí),單位:毫秒。設(shè)置為0表示永不超時(shí),這樣設(shè)置有隱患的。通常可設(shè)置為30000毫秒。
P.S.如果你要手動(dòng)增加這些鏈接相關(guān)參數(shù),那么根據(jù)以上參數(shù)肯定是找不到的,官方文檔提示需要搞另外兩個(gè)參數(shù)才能加大并發(fā)連接數(shù),那就是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).
如果接收到的并發(fā)請(qǐng)求比當(dāng)前可用的請(qǐng)求處理線程所能處理的更多,則將創(chuàng)建額外的線程到配置的最大值(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).
如果接收到更多的并發(fā)請(qǐng)求,則它們被堆疊在由連接器創(chuàng)建的服務(wù)器套接字內(nèi),直到配置的最大值(acceptCount 屬性)。
所以需要設(shè)置的是maxThreads和acceptCount這兩個(gè)值,兩者的默認(rèn)值分別是200和100,要調(diào)整Tomcat的默認(rèn)最大連接數(shù),可以增加這兩個(gè)屬性的值,并且使acceptCount大于等于maxThreads:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" acceptCount="300" maxThreads="200" />
并發(fā)請(qǐng)求數(shù) <= tomcat最大線程數(shù)200,可以看到200個(gè)請(qǐng)求,響應(yīng)結(jié)果正常
并發(fā)數(shù)(201) >tomcat最大線程數(shù)200.可以看到,因?yàn)閠omcat最大的線程數(shù)為200,201的并發(fā)請(qǐng)求量,超出了并發(fā)處理的數(shù)量200,多出來的1個(gè)請(qǐng)求,需要等待某個(gè)處理中的請(qǐng)求處理完成
請(qǐng)求數(shù)超過最大連接數(shù)300,可以看到有大量的沒有正常響應(yīng)的http請(qǐng)求,原因很簡(jiǎn)單,因?yàn)槌^了tomcat設(shè)置的最大連接數(shù),服務(wù)器拒絕了該次請(qǐng)求的連接
增加線程是有成本的,JVM中默認(rèn)情況下在創(chuàng)建新線程時(shí)會(huì)分配大小為1M的線程棧,所以更多的線程異味著更多的內(nèi)存;
更多的線程會(huì)帶來更多的線程上下文切換成本。
springboot中Tomcat配置建議:
最大工作線程數(shù) ,默認(rèn)200(4核8G內(nèi)存,線程數(shù)經(jīng)驗(yàn)值為800,操作系統(tǒng)之間做線程之間切換調(diào)度是有開銷的,不是越多越好),最大連接數(shù)默認(rèn)是10000,等待長(zhǎng)度默認(rèn)為100,最小工作空閑線程默認(rèn)10
線程數(shù)的經(jīng)驗(yàn)值為:1核2G內(nèi)存, 線程數(shù)經(jīng)驗(yàn)值為200,;4核8G內(nèi)存,線程數(shù)經(jīng)驗(yàn)值為800
到此這篇關(guān)于tomcat默認(rèn)最大連接數(shù)與調(diào)整的方法示例的文章就介紹到這了,更多相關(guān)tomcat默認(rèn)最大連接數(shù)內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!
