最近用httpclient做performance testing時,發現當線程加到150時服務端就會拋出socket資源用盡的錯誤,根本沒法再往上加,響應的速度也是相當的慢,后來經過研究,發現在server.xml中修改以一部分,增加節點數目,可以很好的提高性能:
??<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150"
???minSpareThreads="30" maxSpareThreads="75" enableLookups="false"
???redirectPort="8443" acceptCount="100" connectionTimeout="20000"
???disableUploadTimeout="true" />
以上為默認配置,適當修改紅色字體部分的值,幾個參數意義分別為:
maxThreads:Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。
acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。
connnectionTimeout:網絡連接超時,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通常可設置為30000毫秒。
minSpareThreads:Tomcat初始化時創建的線程數。
maxSpareThreads:一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程
對于Connector 8443也有相應的設置,如果同時會用到http與https,應合理分配這兩個數據.如果只用到其中的一個,可以將另外一個盡量設置小一點.
此外,還可以給Java虛擬機設置使用的內存來提高性能,Tomcat默認可以使用的內存為128MB,在較大型的應用項目中,這點內存是不夠的,需要調大。
Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下設置:
JAVA_OPTS='-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】'
需要把這個兩個參數值調大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
?
測試發現,當tomcat線程數增大,但沒有超過最大線程數時,平均響應時間會增大,但這不意味著tomcat在線程增多時響應速度變慢.在測試數據中,我們發現,由于線程數增多,在請求時需要排隊,導致一部分請求會一直排隊,隨著線程數的增多,排隊等待的最大時間也會越來越大,而這些大數據才是導致平均響應時間變大的罪魁禍首.響應時間大于3s的請求占總請求的比例一直維持在3%-5%.
?
?
補充:在代碼方便,代碼中的System.out語句會嚴重影響代碼執行的效率,就將這些為必要的語句在調試完成之后全部刪除以提高效率.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
