溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Tomcat內(nèi)存怎么設(shè)置

發(fā)布時(shí)間:2022-02-17 15:08:01 來源:億速云 閱讀:128 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Tomcat內(nèi)存怎么設(shè)置的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Tomcat內(nèi)存怎么設(shè)置

一、配置

Tomcat/conf/server.xml修改配置

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

二、參數(shù)說明

maxIdleTime:最大空閑時(shí)間,超過這個空閑時(shí)間,且線程數(shù)大于minSpareThreads的,都會被回收,默認(rèn)值1分鐘(60000ms);

minSpareThreads:最小空閑線程數(shù),任何情況都會存活的線程數(shù),即便超過了最大空閑時(shí)間,也不會被回收,默認(rèn)值4;

maxSpareThreads:最大空閑線程數(shù),在最大空閑時(shí)間(maxIdleTime)內(nèi)活躍過,此時(shí)空閑,當(dāng)空閑時(shí)間大于maxIdleTime則被回收,小則繼續(xù)存活,等待被調(diào)度,默認(rèn)值50;

maxThreads:最大線程數(shù),大并發(fā)請求時(shí),tomcat能創(chuàng)建來處理請求的最大線程數(shù),超過則放入請求隊(duì)列中進(jìn)行排隊(duì),默認(rèn)值為200;

acceptCount:當(dāng)最大線程數(shù)(maxThreads)被使用完時(shí),可以放入請求隊(duì)列排隊(duì)個數(shù),超過這個數(shù)返回connection refused(請求被拒絕),一般設(shè)置和max

Threads一樣,不過這個具體需要根據(jù)自己的應(yīng)用實(shí)際訪問峰值和平均值來權(quán)衡,默認(rèn)值為100;

connectionTimeout:網(wǎng)絡(luò)連接超時(shí),假設(shè)設(shè)置為0表示永不超時(shí),這樣設(shè)置隱患巨大,通??稍O(shè)置為30000ms,默認(rèn)60000ms。

Windows Tomcat允許每個進(jìn)程maxThreads(最大線程數(shù))2000

Linux Tomcat允許每個進(jìn)程maxThreads(最大線程數(shù))1000

Tomcat內(nèi)存怎么設(shè)置

圖解線程池原理

Tomcat內(nèi)存怎么設(shè)置

請看下面三種情況

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

情況2:接受一個請求,此時(shí)tomcat起動的線程數(shù)已經(jīng)到達(dá)maxThreads,tomcat會把此請求放入等待隊(duì)列,等待空閑線程。

情況3:接受一個請求,此時(shí)tomcat起動的線程數(shù)已經(jīng)到達(dá)maxThreads,等待隊(duì)列中的請求個數(shù)也達(dá)到了acceptCount,此時(shí)tomcat會直接拒絕此次請求,返回connection refused

maxThreads如何配置

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

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

第二種極端情況,如果我們的操作純粹是IO或者數(shù)據(jù)庫,那么響應(yīng)時(shí)間的主要限制就變?yōu)榈却獠抠Y源,此時(shí)maxThreads應(yīng)該盡量設(shè)的大,這樣才能提高同時(shí)處理請求的個數(shù),從而提高系統(tǒng)整體的處理能力。此情況下因?yàn)閠omcat同時(shí)處理的請求量會比較大,所以需要關(guān)注一下tomcat的虛擬機(jī)內(nèi)存設(shè)置和linux的open file限制。

我在測試時(shí)遇到一個問題,maxThreads我設(shè)置的比較大比如3000,當(dāng)服務(wù)的線程數(shù)大到一定程度時(shí),一般是2000出頭,單次請求的響應(yīng)時(shí)間就會急劇的增加,百思不得其解這是為什么,四處尋求答案無果,最后我總結(jié)的原因可能是cpu在線程切換時(shí)消耗的時(shí)間隨著線程數(shù)量的增加越來越大,cpu把大多數(shù)時(shí)間都用來在這2000多個線程直接切換上了,當(dāng)然cpu就沒有時(shí)間來處理我們的程序了。以前一直簡單的認(rèn)為多線程=高效率。。其實(shí)多線程本身并不能提高cpu效率,線程過多反而會降低cpu效率。當(dāng)cpu核心數(shù)

現(xiàn)實(shí)應(yīng)用中,我們的操作都會包含以上兩種類型(計(jì)算、等待),所以maxThreads的配置并沒有一個最優(yōu)值,一定要根據(jù)具體情況來配置。最好的做法是:在不斷測試的基礎(chǔ)上,不斷調(diào)整、優(yōu)化,才能得到最合理的配置。

acceptCount的配置,我一般是設(shè)置的跟maxThreads一樣大,這個值應(yīng)該是主要根據(jù)應(yīng)用的訪問峰值與平均值來權(quán)衡配置的。

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

如果設(shè)的較大,可能就會出現(xiàn)大量的請求超時(shí)的情況,因?yàn)槲覀兿到y(tǒng)的處理能力是一定的。

以上就是“Tomcat內(nèi)存怎么設(shè)置”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI