Tomcat server.xml中配置的connectionTimeout參數無效?客戶端等待超時時間


【轉】https://segmentfault.com/q/1010000011412748

 

在tomcat的配置文件server.xml中,可以設置Connector的參數,其中包含超時參數connectionTimeout。

apache官網對於這些參數的解釋:https://tomcat.apache.org/tom...

本人對其中幾個重要參數大致理解為(應該理解錯了):

  • connectionTimeout:一個請求最多等待時間,超過則報錯。
  • maxConnections:最多同時連接數,連接上不一定處理。超過連接數,則排隊。
  • maxThreads:同時處理的線程數,經測試,理解無誤。
  • acceptCount:等待隊列長度,當超越maxConnections時,會進入等待隊列。等待隊列滿之后,直接拒絕請求。

對這些參數進行測試,然而遇到了疑惑。


第一組測試

設置:
connectionTimeout為10000,
maxConnections為2,
maxThreads為2,
acceptCount為2。

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="10000"
               redirectPort="8443" 
               maxConnections="2" maxThreads="2" acceptCount="2"/>

 

寫一個controller測試,sleep30s。

@RequestMapping(value = "sync")
@ResponseBody
public String sync() throws InterruptedException {
    Thread.sleep(30000L);
    return "test success";
}

  

使用JMeter進行測試。

 

測試結果,嘗試三次都一致,如下:

一共20次請求,失敗14個。

 

前兩個請求,的確是在30s之后返回。

失敗的14個請求,都在52s左右。

 

最后四個成功的請求,前兩個在60s時返回,后兩個在90s時返回。符合sleep30s的時間點。

分析:

  1. 同時生成20次請求。
  2. maxConnections=2,有兩個請求被連接上,acceptCount=2,有兩個請求進行排隊。
  3. 其余16個請求,應該在某處也“排着隊”吧,就稱為野生請求。
  4. maxThreads=2,兩個請求同時處理,30s后,這兩個請求處理完畢。
  5. 排隊的兩個請求連接,兩個野生請求進入隊列。
  6. 莫名其妙地在52s時,進行了一波等待超時判斷,14個野生請求全部失敗。
  7. 已經連接和在排隊中的請求后續會成功處理。

疑問:

  1. 52s來自何處,設置的connectionTimeout是10s呢。

第二組測試

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="10000"
               redirectPort="8443" 
               maxConnections="10" maxThreads="2" acceptCount="5"/>

  

 

其中設置:
connectionTimeout為10000,
maxConnections為10,
maxThreads為2,
acceptCount為5。

仍發起20次請求,共失敗5次

失敗的4次請求,仍然是在52s左右失敗。

 

之后的請求返回時間符合每30s返回兩個的預期。

分析:

  1. 連接10個,等待5個,每次處理2個。
  2. 30s后,2個請求成功返回,連接數變成8個,按照第一組的分析,會有2個等待請求頂上去。那么,最終失敗的請求應該是3個,然而結果是5個。
  3. 猜測需要等到連接的請求全部完成后或完成一部分之后,等待請求才會頂上去,野生請求只能干等。

疑問:

  1. connectionTimeout參數作用是?52s何處來?
  2. 其他幾個參數理解是否正確?

 

  

 


免責聲明!

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



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