基礎:每個進入到tomcat的請求,都會創建一個新線程來處理。
幾個關鍵參數
max threads 最大線程數,指的是tomcat可以接受的最大請求數,默認200
acceptcount 隊列最大數,指當請求數達到max threads時,隊列可以緩存的請求數,默認應該是100
max connections 最大連接數,服務器想發送請求,必須先和tomcat建立socket鏈接,這個就是允許的最大連接數了。最大連接數應該大於最大線程數+隊列最大數,默認應該是1000
需要根據服務類型來區分,
如果是IO密集型服務,這類服務由於多是等待IO的處理時間,所以可以適當調大max threads和acceptcount,但是要防止調整過大導致過多請求進入等待隊列以至於連接超時問題。還有每個線程大概要佔用1m的內存,線程間切換也有開銷。如果連接數過大,會導致切換過於頻繁反而導致性能下降。所以最好的方案在IO密集型服務中,如果需要可以適當的加大最大連接數和隊列數量,但相加小於最大連接數,還不能滿足可以做負載均衡。
如果是計算密集型服務,由於需要更多CPU的資源進行運算,所以如果線程數過多會導致大量線程爭奪CPU資源,反而降低效率;所以應該適當的調小最大連接數和隊列數。
tomcat默認使用BIO,阻塞IO,效率較低,可以調整使用NIO。不過不建議使用,可以直接使用netty容器。