Tomcat有兩種主要的Http Connector
org.apache.coyote.http11.Http11Protocol
支援參數:maxThreads,minSpareThreads,maxSpareThreads,acceptCount
org.apache.coyote.http11.Http11NioProtocol
支援參數:maxThreads
後者加入了Nio的運用,據說能提升性能
為了驗證效果,粗略進行了測試,方法:
1)建立測試Servlet,其中做100,000,000次空循環
2)測試程式對測試Servlet同時發起一定數量的Http請求,看請求的成功率
3)調整參數和請求數量進行多輪測試,比較測試結果
測試結果:
1)Http11Protocol
并發請求從200逐漸增加至1000。
在并發500以下的階段時,在運作穩定後還是可以達到較高的請求成功率(90以上),但需要對應調高參數,如在并發500時,maxThreads=500,acceptCount=166
在并發500以上的階段時,并發數再繼續增加,成功率會明顯下降,報大量“拒絕連接配接”錯誤;即使調高參數,效果并不明顯。
在并發1000階段,maxThreads=500,acceptCount=166,運作穩定後成功率大概在80
在并發1000以上階段,很容易出現OutOfMemory錯誤(沒有調大JVM記憶體,估計是
Socket連接配接不斷增加,有沒有及時釋放)
2)Http11NioProtocol
并發數一直增加至1500,成功率都很高(接近100)。而且目前線程數基本維持在100-200水準,并沒有随着并發數的增加而成比例增加;測試完後,可以很快看到線程數很快下降;記憶體也沒有出現錯誤。
初步來看,Http11Protocol應對大并發量還是力不從心;Http11NioProtocol的優化效果則較明顯,運作穩定、有效率且資源控制得較好。可進一步在實際環境中應用,在深入分析。
測試環境:
OS: Win7 32bit
Tomcat:6.0.26
RAM: 4G
CPU: P8700