站長資訊網
        最全最豐富的資訊網站

        Tomcat修改內存配置

        一、配置

        Tomcat/conf/server.xml修改配置

        <Connector port=”8080″ protocol=”org.apache.coyote.http11.Http11NioProtocol”
                redirectPort=”8443″
                URIEncoding=”UTF-8″
                minSpareThreads=”25″
                maxSpareThreads=”300″
                maxThreads=”500″
                acceptCount=”500″
                connectionTimeout=”30000″
                enableLookups=”false”/>

        二、參數說明

        maxIdleTime:最大空閑時間,超過這個空閑時間,且線程數大于minSpareThreads的,都會被回收,默認值1分鐘(60000ms);
        minSpareThreads:最小空閑線程數,任何情況都會存活的線程數,即便超過了最大空閑時間,也不會被回收,默認值4;
        maxSpareThreads:最大空閑線程數,在最大空閑時間(maxIdleTime)內活躍過,此時空閑,當空閑時間大于maxIdleTime則被回收,小則繼續存活,等待被調度,默認值50;
        maxThreads:最大線程數,大并發請求時,tomcat能創建來處理請求的最大線程數,超過則放入請求隊列中進行排隊,默認值為200;
        acceptCount:當最大線程數(maxThreads)被使用完時,可以放入請求隊列排隊個數,超過這個數返回connection refused(請求被拒絕),一般設置和maxThreads一樣,不過這個具體需要根據自己的應用實際訪問峰值和平均值來權衡,默認值為100;
        connectionTimeout:網絡連接超時,假設設置為0表示永不超時,這樣設置隱患巨大,通常可設置為30000ms,默認60000ms。
        Windows Tomcat允許每個進程maxThreads(最大線程數)2000
        Linux Tomcat允許每個進程maxThreads(最大線程數)1000

        Tomcat修改內存配置

        圖解線程池原理

        Tomcat修改內存配置

        請看下面三種情況

        情況1:接受一個請求,此時tomcat起動的線程數沒有到達maxThreads,tomcat會起動一個線程來處理此請求。

        情況2:接受一個請求,此時tomcat起動的線程數已經到達maxThreads,tomcat會把此請求放入等待隊列,等待空閑線程。

        情況3:接受一個請求,此時tomcat起動的線程數已經到達maxThreads,等待隊列中的請求個數也達到了acceptCount,此時tomcat會直接拒絕此次請求,返回connection refused

        maxThreads如何配置

        一般的服務器操作都包括量方面:1計算(主要消耗cpu),2等待(io、數據庫等)

        第一種極端情況,如果我們的操作是純粹的計算,那么系統響應時間的主要限制就是cpu的運算能力,此時maxThreads應該盡量設的小,降低同一時間內爭搶cpu的線程個數,可以提高計算效率,提高系統的整體處理能力。

        第二種極端情況,如果我們的操作純粹是IO或者數據庫,那么響應時間的主要限制就變為等待外部資源,此時maxThreads應該盡量設的大,這樣才能提高同時處理請求的個數,從而提高系統整體的處理能力。此情況下因為tomcat同時處理的請求量會比較大,所以需要關注一下tomcat的虛擬機內存設置和linux的open file限制。

        我在測試時遇到一個問題,maxThreads我設置的比較大比如3000,當服務的線程數大到一定程度時,一般是2000出頭,單次請求的響應時間就會急劇的增加,

        百思不得其解這是為什么,四處尋求答案無果,最后我總結的原因可能是cpu在線程切換時消耗的時間隨著線程數量的增加越來越大,

        cpu把大多數時間都用來在這2000多個線程直接切換上了,當然cpu就沒有時間來處理我們的程序了。

        以前一直簡單的認為多線程=高效率。。其實多線程本身并不能提高cpu效率,線程過多反而會降低cpu效率。

        當cpu核心數<線程數時,cpu就需要在多個線程直接來回切換,以保證每個線程都會獲得cpu時間,即通常我們說的并發執行。

        所以maxThreads的配置絕對不是越大越好。

        現實應用中,我們的操作都會包含以上兩種類型(計算、等待),所以maxThreads的配置并沒有一個最優值,一定要根據具體情況來配置。

        最好的做法是:在不斷測試的基礎上,不斷調整、優化,才能得到最合理的配置。

        acceptCount的配置,我一般是設置的跟maxThreads一樣大,這個值應該是主要根據應用的訪問峰值與平均值來權衡配置的。

        如果設的較小,可以保證接受的請求較快相應,但是超出的請求可能就直接被拒絕

        如果設的較大,可能就會出現大量的請求超時的情況,因為我們系統的處理能力是一定的。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲精品乱码久久久久66| 无码精品久久久久久人妻中字| 国产小呦泬泬99精品| 国产精品成人在线| 亚洲精品无码成人片久久 | 精品久久久久久无码中文字幕| 久久综合久久自在自线精品自| 精品综合久久久久久88小说| 九九在线精品视频专区| 国产精品自在线拍国产| 四虎影视永久在线观看精品| 国产在线观看高清精品| 2021国产成人精品久久| 99精品在线观看| 国产午夜无码精品免费看| 亚洲国产另类久久久精品黑人| 日韩精品一区二三区中文 | 中文字幕久精品免费视频| 国产女人18毛片水真多18精品| 国产成人精品日本亚洲18图| 国产午夜福利精品久久2021| 亚洲AV成人精品网站在线播放| 无码国模国产在线无码精品国产自在久国产 | 亚洲一区二区三区在线观看精品中文 | 精品一区二区三区在线观看| 国产福利精品视频自拍| 免费精品99久久国产综合精品| 2021久久国自产拍精品| 国产欧美日韩精品a在线观看| 久久亚洲精品国产精品| 午夜精品久久久久久中宇| 亚洲精品乱码久久久久久蜜桃不卡 | 九九久久精品国产| 国产欧美日韩综合精品一区二区三区| 自怕偷自怕亚洲精品| 午夜精品美女写真福利| 亚洲国产精品嫩草影院| jizz国产精品| 久久精品夜色噜噜亚洲A∨| 免费精品精品国产欧美在线欧美高清免费一级在线 | 国亚洲欧美日韩精品|