springboot tomcat最大線程數(shù)與最大連接數(shù)解析
首先看看springboot內(nèi)置的tomcat,該如何配置這兩個參數(shù)
# 在配置文件中添加如下內(nèi)容# tomcat最大線程數(shù),默認(rèn)為200server.tomcat.max-threads=200# tomcat最大連接數(shù),默認(rèn)為10000(網(wǎng)上的說法)server.tomcat.max-connections=300如何理解上面兩個參數(shù)
為了方便理解,我這里使用了springboot編寫了一個簡單了的服務(wù),包含一個模擬登錄的接口,并使用jmeter進(jìn)行測試,不了解jmeter如何使用的朋友可以翻看我的歷史文章。部分代碼如下
// java 代碼@RestController@RequestMapping('/user')public class UserController { @Autowired private UsersRepository usersRepository; @PostMapping('/login') public String login(Users user) throws InterruptedException {// 這里將線程掛起3秒,方便觀察結(jié)果Thread.sleep(3000);Users checkUser = usersRepository.findByName(user.getName());if(checkUser == null) return '用戶不存在';if(!checkUser.getPassword().equals(user.getPassword())) return '密碼錯誤';System.out.println('用戶:' + checkUser.getName() + ',登錄成功');return '登錄成功'; }}
接下來,設(shè)置jmeter中的線程數(shù),分別測試以下場景返回的結(jié)果
注意:我在java代碼中添加將線程掛起3秒的語句,實際的響應(yīng)時間應(yīng)該減去3秒
場景1:并發(fā)請求數(shù) <= tomcat最大線程數(shù)200
設(shè)置jmeter并發(fā)請求數(shù)量為200

結(jié)果統(tǒng)計
結(jié)論:可以看到200個請求,平均響應(yīng)時間為(3156-3000)=156ms,最小響應(yīng)時間為23ms,最大響應(yīng)時間為336ms,響應(yīng)結(jié)果正常。
場景2:并發(fā)數(shù) >tomcat最大線程數(shù)200,以下我將jmeter線程數(shù)設(shè)置為201,再來看看結(jié)果
看了下,平均值,最小值好像沒什么異常,但是最大值卻去到了5606毫秒,接近6S的時間。為什么會有個接近6S的最大值,原因很簡單,因為tomcat最大的線程數(shù)為200,201的并發(fā)請求量,超出了并發(fā)處理的數(shù)量200,多出來的1個請求,需要等待某個處理中的請求處理完成。
這里我翻看了jmeter中大部分的http請求,驗證了我的想法。大部分的http請求,響應(yīng)時間都是3000多毫秒,只有最后一個響應(yīng)的請求,響應(yīng)的時間為5606毫秒,截圖如下


異常數(shù)量由原本的百分之0變成37.45%

可以看到有大量的沒有正常響應(yīng)的http請求,原因很簡單,因為超過了tomcat設(shè)置的最大連接數(shù),服務(wù)器拒絕了該次請求的連接
SpringBoot中修改tomcat最大連接數(shù)、最大線程數(shù)、最大等待數(shù)1)maxThreads(最大線程數(shù))每一次HTTP請求到達(dá)Web服務(wù)器,Web服務(wù)器都會創(chuàng)建一個線程來處理該請求,該參數(shù)決定了應(yīng)用服務(wù)同時可以處理多少個HTTP請求,tomcat默認(rèn)為200;
2)accepCount(最大等待數(shù))當(dāng)調(diào)用Web服務(wù)的HTTP請求數(shù)達(dá)到tomcat的最大線程數(shù)時,還有新的HTTP請求到來,這時tomcat會將該請求放在等待隊列中,這個acceptCount就是指能夠接受的最大等待數(shù),默認(rèn)100.如果等待隊列也被放滿了,這個時候再來新的請求就會被tomcat拒絕(connection refused);
3)maxConnections(最大連接數(shù))這個參數(shù)是指在同一時間,tomcat能夠接受的最大連接數(shù)。一般這個值要大于maxThreads+acceptCount。
根據(jù)公司用戶量及機器配置信息,公司的最大連接數(shù)、最大線程數(shù)和最大等待數(shù)優(yōu)化為:
#最大連接數(shù) server.tomcat.max-connections=2000 #最大線程數(shù) server.tomcat.max-threads=1000 #最大等待數(shù) server.tomcat.accept-count=800
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Android table布局開發(fā)實現(xiàn)簡單計算器2. IntelliJ IDEA安裝插件的方法步驟3. 理解PHP5中static和const關(guān)鍵字4. php模擬實現(xiàn)斗地主發(fā)牌5. spring acegi security 1.0.0 發(fā)布6. MyBatis中的JdbcType映射使用詳解7. vue 使用localstorage實現(xiàn)面包屑的操作8. Python random庫使用方法及異常處理方案9. .Net Core使用Coravel實現(xiàn)任務(wù)調(diào)度的完整步驟10. Vuex localStorage的具體使用

網(wǎng)公網(wǎng)安備