tomcat鏈接數過大,導致超時問題解決

爲了確保服務不會被過多的http長連接壓垮,我們需要對tomcat設定個最大連接數,超過這個連接數的請求會拒絕,讓其負載到其它機器。達到保護自己的同時起到連接數負載均衡的作用。
tomcat參數調優
(1)不使用線程池的情況

後兩個參數意義:
maxThreads:tomcat啓動時候創建的最大線程數,即同時處理的任務個數,默認值爲200
acceptCount:當tomcat啓動時候的線程數達到最大時,接受排隊的請求個數,默認值爲100
(2)使用線程池的情況
第一步:打開共享的線程池

  <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"  
  maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/> 

第二步 :在 Connector裏指定使用共享線程池

注意,一旦使用了線程池,則其它的線程屬性,比如 maxThreads等將被忽略

如何配置maxThreads、acceptCount才能使tomcat服務爲最優

一般的服務器操作都包括量方面:1計算(主要消耗cpu),2等待(io、數據庫等)
第一種極端情況,如果我們的操作是純粹的計算,那麼系統響應時間的主要限制就是cpu的運算能力,此時maxThreads應該儘量設的小,降低同一時間內爭搶cpu的線程個數,可以提高計算效率,提高系統的整體處理能力。
第二種極端情況,如果我們的操作純粹是IO或者數據庫,那麼響應時間的主要限制就變爲等待外部資源,此時maxThreads應該儘量設的大,這樣才能提高同時處理請求的個數,從而提高系統整體的處理能力。此情況下因爲tomcat同時處理的請求量會比較大,所以需要關注一下tomcat的虛擬機內存設置和linux的open file限制

注意:其實多線程本身並不能提高cpu效率,線程過多反而會降低cpu效率。
當cpu核心數<線程數時,cpu就需要在多個線程直接來回切換,以保證每個線程都會獲得cpu時間,即通常我們說的併發執行。 所以maxThreads的配置絕對不是越大越好。

最好的做法是:在不斷測試的基礎上,不斷調整、優化,才能得到最合理的配置。
acceptCount的配置,我一般是設置的跟maxThreads一樣大,這個值應該是主要根據應用的訪問峯值與平均值來權衡配置的。

如何查看linux下的open file限制
命令:ulimit -a
查看open file的值

查看tomcat服務併發數

netstat -an | grep ESTABLISHED | wc -l

查看tomcat併發數,對比maxThreads的差額是多少
查看tomcat多少個進程

ps aux|grep tomcat |wc -l  

查看80端口下的鏈接數

netstat -ant|grep -i "80"|wc -l  

netstat -an會打印系統當前網絡鏈接狀態,而grep -i "80"是用來提取與80端口有關的連接的,wc -l進行連接數統計。最終返回的數字就是當前所有80端口的請求總數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章