共計 2734 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章將為大家詳細講解有關 Tomcat 重要參數如何調優,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一般最常做的更改,就是修改服務器的端口,也就是 server.xml 里的 Connector 部分。典型如下圖所示:
其實,大部分優化,也是在 Connector 標簽之內,從端口、并發到線程,都可以在這里配置。
一. 3 個參數搞定并發配置
作為一個能承接高并發互聯網請求的 Web 容器,首當其沖的當然是海量請求的沖擊。幸運的是 Tomcat 支持 NIO,我們可以通過調整線程數和并發配置,讓它表現出最佳的性能。
maxThreads — tomcat 接收客戶端請求的最大線程數,也就是同時處理任務的個數,它的默認大小為 200; 一般來說,在高并發的 I / O 密集型應用中,這個值設置為 1000 左右比較合理
maxConnections 這個參數是指在同一時間,tomcat 能夠接受的最大連接數。對于 Java 的阻塞式 BIO,默認值是 maxthreads 的值; 如果在 BIO 模式使用定制的 Executor 執行器,默認值將是執行器中 maxThreads 的值。對于 Java 新的 NIO 模式,maxConnections 默認值是 10000,所以這個參數我們一般保持不動即可
acceptCount — 當線程數量達到上面設置的值,所能接受的最大排隊數量。超過了這個值,請求就會被拒絕。我一般會設置成和 maxThreads 設置成一樣大的
簡單說明一下上面三個參數的關系:
系統能夠保持的連接數
maxConnections+acceptCount,區別是 maxConnections 中的連接可以被調度處理;acceptCount 中的連接只能等待排隊
系統能處理的請求數
maxThreads 的大小,實際能夠工作的線程數量。
幸福指數:maxThreads maxConnections acceptCount。
現在有些文章還充斥著 maxProcessors 和 minProcessors。但這兩個參數,從 Tomcat5 開始被 deprecated,從 6 開始就徹底沒了。
只能說你看到的這些文章,可能真的是不懂技術的運營發表的。
以 8 為代表,具體配置參數可以參見:
https://tomcat.apache.org/tomcat-8.0-doc/config/http.html
二、線程配置
在并發配置方面,可以看到我們只有 minSpareThreads,但是卻沒有 maxSpareThreads。這是因為,從 Tomcat 6 開始增加 Executor 節點,這個參數已經沒用了。
由于線程是一個池子,所以它的配置,滿足池的一切特點。
參照:
https://tomcat.apache.org/tomcat-8.0-doc/config/executor.html
namePrefix — 每個新開線程的名稱前綴
maxThreads — 線程池中的最大線程數
minSpareThreads — 一直處于活躍狀態的線程數
maxIdleTime — 線程的空閑時間,在超過空閑時間時這些線程則會被銷毀
threadPriority — 線程池中線程的優先級,默認為 5
三、搞定 JVM 配置
tomcat 是 Java 應用,所以 JVM 的配置同樣會影響它的性能。比較重要的配置參數如下。
2.1、內存區域大小
首先要調整的,就是各個分區的大小,不過這也要分垃圾回收器,我們僅看一下一些全局的參數。
-XX:+UseG1GC 首先,要指定 JVM 使用的垃圾回收器。盡量不要靠默認值去保證,要顯式的指定一個。
-Xmx 設置堆的最大值,一般為操作系統的 2 / 3 大小。
-Xms 設置堆的初始值,一般設置成和 Xmx 一樣的大小來避免動態擴容。
-Xmn 年輕代大小,默認新生代占堆大小的 1 /3。高并發快消亡場景可適當加大這個區域。對半,或者更多,都是可以的。但是在 G1 下,就不用再設置這個值了,它會自動調整。
-XX:MaxMetaspaceSize 限制元空間的大小,一般 256M 足夠。這一般和初始大小 **-XX:MetaspaceSize** 設置成一樣的。
-XX:MaxDirectMemorySize 設置直接內存的最大值,限制通過 DirectByteBuffer 申請的內存。
-XX:ReservedCodeCacheSize 設置 JIT 編譯后的代碼存放區大小,如果觀察到這個值有限制,可以適當調大,一般夠用。
-Xss 設置棧的大小,默認為 1M,已經足夠用了。
2.2、內存調優
-XX:+AlwaysPreTouch 啟動時就把參數里說好了的內存全部初始化,啟動時間會慢一些,但運行速度會增加。
-XX:SurvivorRatio 默認值為 8。表示伊甸區和幸存區的比例。
-XX:MaxTenuringThreshold 這個值在 CMS 下默認為 6,G1 下默認為 15。這個值和我們前面提到的對象提升有關,改動效果會比較明顯。對象的年齡分布可以使用 **-XX:+PrintTenuringDistribution** 打印,如果后面幾代的大小總是差不多,證明過了某個年齡后的對象總能晉升到老生代,就可以把晉升閾值設小。
PretenureSizeThreshold 超過一定大小的對象,將直接在老年代分配。不過這個參數用的不是很多。
2.3、垃圾回收器優化
G1 垃圾回收器
-XX:MaxGCPauseMillis 設置目標停頓時間,G1 會盡力達成。
-XX:G1HeapRegionSize 設置小堆區大小。這個值為 2 的次冪,不要太大,也不要太小。如果是在不知道如何設置,保持默認。
-XX:InitiatingHeapOccupancyPercent 當整個堆內存使用達到一定比例 (默認是 45%),并發標記階段就會被啟動。
-XX:ConcGCThreads 并發垃圾收集器使用的線程數量。默認值隨 JVM 運行的平臺不同而不同。不建議修改。
四、其他重要配置
再看幾個在 Connector 中配置的重要參數。
enableLookups — 調用 request、getRemoteHost() 執行 DNS 查詢,以返回遠程主機的主機名,如果設置為 false,則直接返回 IP 地址。這個要根據需求來
URIEncoding — 用于解碼 URL 的字符編碼,沒有指定默認值為 ISO-8859-1
connectionTimeout — 連接的超時時間 (以毫秒為單位)
redirectPort — 指定服務器正在處理 http 請求時收到了一個 SSL 傳輸請求后重定向的端口號
關于“Tomcat 重要參數如何調優”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。