溫馨提示×

溫馨提示×

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

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

Tomcat重要參數(shù)如何調(diào)優(yōu)

發(fā)布時間:2021-12-14 15:15:49 來源:億速云 閱讀:199 作者:小新 欄目:服務(wù)器

這篇文章將為大家詳細講解有關(guān)Tomcat重要參數(shù)如何調(diào)優(yōu),小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一般最常做的更改,就是修改服務(wù)器的端口,也就是server.xml里的Connector部分。典型如下圖所示:

Tomcat重要參數(shù)如何調(diào)優(yōu)

其實,大部分優(yōu)化,也是在Connector標(biāo)簽之內(nèi),從端口、并發(fā)到線程,都可以在這里配置。

一. 3個參數(shù)搞定并發(fā)配置

作為一個能承接高并發(fā)互聯(lián)網(wǎng)請求的Web容器,首當(dāng)其沖的當(dāng)然是海量請求的沖擊。幸運的是Tomcat支持NIO,我們可以通過調(diào)整線程數(shù)和并發(fā)配置,讓它表現(xiàn)出最佳的性能。

  • maxThreads --  tomcat接收客戶端請求的最大線程數(shù),也就是同時處理任務(wù)的個數(shù),它的默認大小為200;一般來說,在高并發(fā)的I/O密集型應(yīng)用中,這個值設(shè)置為1000左右比較合理

  • maxConnections  這個參數(shù)是指在同一時間,tomcat能夠接受的最大連接數(shù)。對于Java的阻塞式BIO,默認值是maxthreads的值;如果在BIO模式使用定制的Executor執(zhí)行器,默認值將是執(zhí)行器中maxThreads的值。對于Java  新的NIO模式,maxConnections 默認值是10000,所以這個參數(shù)我們一般保持不動即可

  • acceptCount --  當(dāng)線程數(shù)量達到上面設(shè)置的值,所能接受的最大排隊數(shù)量。超過了這個值,請求就會被拒絕。我一般會設(shè)置成和maxThreads設(shè)置成一樣大的

簡單說明一下上面三個參數(shù)的關(guān)系:

系統(tǒng)能夠保持的連接數(shù)

maxConnections+acceptCount,區(qū)別是maxConnections中的連接可以被調(diào)度處理;acceptCount中的連接只能等待排隊

系統(tǒng)能處理的請求數(shù)

maxThreads的大小,實際能夠工作的線程數(shù)量。

幸福指數(shù):maxThreads > maxConnections > acceptCount。

現(xiàn)在有些文章還充斥著maxProcessors和minProcessors。但這兩個參數(shù),從Tomcat5開始被deprecated,從6開始就徹底沒了。

只能說你看到的這些文章,可能真的是不懂技術(shù)的運營發(fā)表的。

以8為代表,具體配置參數(shù)可以參見:

https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

二、線程配置

在并發(fā)配置方面,可以看到我們只有minSpareThreads,但是卻沒有maxSpareThreads。這是因為,從Tomcat  6開始增加Executor 節(jié)點,這個參數(shù)已經(jīng)沒用了。

由于線程是一個池子,所以它的配置,滿足池的一切特點。

參照:

https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html
  • namePrefix -- 每個新開線程的名稱前綴

  • maxThreads -- 線程池中的最大線程數(shù)

  • minSpareThreads -- 一直處于活躍狀態(tài)的線程數(shù)

  • maxIdleTime -- 線程的空閑時間,在超過空閑時間時這些線程則會被銷毀

  • threadPriority -- 線程池中線程的優(yōu)先級,默認為5

三、搞定JVM配置

tomcat是Java應(yīng)用,所以JVM的配置同樣會影響它的性能。比較重要的配置參數(shù)如下。

2.1、內(nèi)存區(qū)域大小

首先要調(diào)整的,就是各個分區(qū)的大小,不過這也要分垃圾回收器,我們僅看一下一些全局的參數(shù)。

  • -XX:+UseG1GC 首先,要指定JVM使用的垃圾回收器。盡量不要靠默認值去保證,要顯式的指定一個。

  • -Xmx 設(shè)置堆的最大值,一般為操作系統(tǒng)的2/3大小。

  • -Xms 設(shè)置堆的初始值,一般設(shè)置成和Xmx一樣的大小來避免動態(tài)擴容。

  • -Xmn  年輕代大小,默認新生代占堆大小的1/3。高并發(fā)快消亡場景可適當(dāng)加大這個區(qū)域。對半,或者更多,都是可以的。但是在G1下,就不用再設(shè)置這個值了,它會自動調(diào)整。

  • -XX:MaxMetaspaceSize  限制元空間的大小,一般256M足夠。這一般和初始大小**-XX:MetaspaceSize**設(shè)置成一樣的。

  • -XX:MaxDirectMemorySize 設(shè)置直接內(nèi)存的最大值,限制通過DirectByteBuffer申請的內(nèi)存。

  • -XX:ReservedCodeCacheSize 設(shè)置JIT編譯后的代碼存放區(qū)大小,如果觀察到這個值有限制,可以適當(dāng)調(diào)大,一般夠用。

  • -Xss 設(shè)置棧的大小,默認為1M,已經(jīng)足夠用了。

2.2、內(nèi)存調(diào)優(yōu)

  • -XX:+AlwaysPreTouch 啟動時就把參數(shù)里說好了的內(nèi)存全部初始化,啟動時間會慢一些,但運行速度會增加。

  • -XX:SurvivorRatio 默認值為8。表示伊甸區(qū)和幸存區(qū)的比例。

  • -XX:MaxTenuringThreshold  這個值在CMS下默認為6,G1下默認為15。這個值和我們前面提到的對象提升有關(guān),改動效果會比較明顯。對象的年齡分布可以使用**-XX:+PrintTenuringDistribution**打印,如果后面幾代的大小總是差不多,證明過了某個年齡后的對象總能晉升到老生代,就可以把晉升閾值設(shè)小。

  • PretenureSizeThreshold 超過一定大小的對象,將直接在老年代分配。不過這個參數(shù)用的不是很多。

2.3、垃圾回收器優(yōu)化

G1垃圾回收器

  • -XX:MaxGCPauseMillis 設(shè)置目標(biāo)停頓時間,G1會盡力達成。

  • -XX:G1HeapRegionSize 設(shè)置小堆區(qū)大小。這個值為2的次冪,不要太大,也不要太小。如果是在不知道如何設(shè)置,保持默認。

  • -XX:InitiatingHeapOccupancyPercent 當(dāng)整個堆內(nèi)存使用達到一定比例(默認是45%),并發(fā)標(biāo)記階段就會被啟動。

  • -XX:ConcGCThreads 并發(fā)垃圾收集器使用的線程數(shù)量。默認值隨JVM運行的平臺不同而不同。不建議修改。

四、其他重要配置

再看幾個在Connector中配置的重要參數(shù)。

  • enableLookups --  調(diào)用request、getRemoteHost()執(zhí)行DNS查詢,以返回遠程主機的主機名,如果設(shè)置為false,則直接返回IP地址。這個要根據(jù)需求來

  • URIEncoding -- 用于解碼URL的字符編碼,沒有指定默認值為ISO-8859-1

  • connectionTimeout -- 連接的超時時間(以毫秒為單位)

  • redirectPort -- 指定服務(wù)器正在處理http請求時收到了一個SSL傳輸請求后重定向的端口號

關(guān)于“Tomcat重要參數(shù)如何調(diào)優(yōu)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

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

AI