溫馨提示×

溫馨提示×

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

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

Tomcat 優(yōu)化

發(fā)布時間:2020-07-05 05:50:41 來源:網(wǎng)絡 閱讀:305 作者:紅塵世間 欄目:系統(tǒng)運維

1. 配置優(yōu)化

1.1. server.xml 配置
[root@localhost ~]# cat server.xml
......
<Connector port="8080"   
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"            # 設置 HTTP 頭部大小
maxThreads="5000"                   # 指定可創(chuàng)建的最大線程數(shù), 默認值為 200
minSpareThreads="30"                # 指定最小空閑線程數(shù), 默認值是 25
maxSpareThreads="300"               # 指定最大空閑線程數(shù)
maxIdleTime="60000"                 # 指定線程最大空閑時間, 單位毫秒
minProcessors="30"                  # 服務器創(chuàng)建時的最小處理線程數(shù)
maxProcessors="5000"                # 服務器同時最大處理線程數(shù) 
enableLookups="false"               # 關閉主機名反解, 值為 true 或 false; true 返回主機名, false 返回 IP 地址
URIEncoding="utf-8"                 # 設置 URL 編碼
acceptCount="5000"                  # 監(jiān)聽端口隊列最大數(shù)(不能小于 maxSpareThreads) 
redirectPort="8443"                 # 在需要基于安全通道的場合, 把客戶請求轉(zhuǎn)發(fā)到基于 SSL 的端口 
disableUploadTimeout="false"        # 指定上傳時是否使用超時機制, 值為 true 或 false
compression="on"                    # 指定是否對響應的數(shù)據(jù)進行 GZIP 壓縮, on 允許壓縮(文本壓縮), off 禁止壓縮, force 所有情況都進行壓縮, 默認值為 off
compressionMinSize="2048"           # 指定壓縮響應的最小值, 響應報文大小大于該值對報文進行壓縮, 默認值為 2048
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"       # 壓縮類型
noCompressionUserAgents="gozilla,traviata"                                          # 指定對以下的瀏覽器不啟用壓縮
connnectionTimeout="30000"          # 指定網(wǎng)絡連接超時時間, 0 表示永不超時, 單位毫秒
connectionUploadTimeout="150000"    # 指定上傳超時時間, 單位毫秒
keepAliveTimeout="120000"           # 指定長連接最大保持時間, 默認使用 connectionTimeout 時間, -1 表示不限制超時, 單位毫秒
maxKeepAliveRequests="1"            # 最大長連接個數(shù), 1 表示禁用長連接, -1 表示不限制長連接個數(shù), 默認運行保持 100 長連接
connectionTimeout="5000" />         # 客戶連接超時的時間, 如果為 -1 表示不限制建立客戶連接的時間, 單位毫秒
1.2. Tomcat IO 優(yōu)化
Tomcat 連接器的三種方式: bio、nio 和 apr, apr 性能最優(yōu), bio 性能最差
BIO: 同步并阻塞, 服務器實現(xiàn)模式為一個連接一個線程(默認的工作模式)

# NIO 的工作模式
NIO: 同步非阻塞(JDK1.4 以上版本)

<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8"
useBodyEncodingForURI="true" 
enableLookups="false"
redirectPort="8443" />

# APR 的工作模式
APR: 從操作系統(tǒng)級別來解決異步的 IO 問題, 大幅度的提高性能, JDK7 開始支持, 需要安裝官方的插件才能使用
http://tomcat.apache.org/native-doc/    # 插件下載
yum -y install tomcat-native            # 或者使用 yum 安裝, 在 epel 中

<Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
URIEncoding="UTF-8" 
useBodyEncodingForURI="true"
enableLookups="false"
redirectPort="8443" />
1.3. context.xml
[root@localhost ~]# cat context.xml
# 設置上下文最大可用緩存
<Resources cachingAllowed="true" cacheMaxSize="100000" />

cachingAllowed  指定允許開啟緩存
cacheMaxSize    指定最大可用緩存, 默認 10M, 單位 KB
1.4. catalina.properties
[root@localhost ~]# cat catalina.properties
# 禁用 TLDs 掃描
tomcat.util.scan.StandardJarScanFilter.jarsToSkip = ****

2. JVM 優(yōu)化

JVM 優(yōu)化主要修改 catalina.sh 腳本里面 JAVA_OPTSCATALINA_OPTS 的參數(shù)
JAVA_OPTS: 設置 JVM 相關運行參數(shù)的變量,用于Java運行時選項start, stoprun 命令執(zhí)行
CATALINA_OPTS: 設置 Tomcat 相關運行參數(shù)的變量, 用于 Java 運行時選項 start, run 命令執(zhí)行

JVM 內(nèi)存劃分分為新生代(Young Generation)、老年代(Old Generation)永久代(Permanent Generation)
堆內(nèi)存(Heap) = 新生代 + 老年代, 非堆內(nèi)存 = 永久代

CATALINA_OPTS="
${CATALINA_OPTS} 
-server 
-Xms6000M 
-Xmx6000M 
-Xss512k 
-XX:NewSize=2250M 
-XX:MaxNewSize=2250M 
-XX:+AggressiveOpts 
-XX:+UseBiasedLocking 
-XX:+DisableExplicitGC 
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:MaxTenuringThreshold=15 
-XX:+CMSParallelRemarkEnabled 
-XX:LargePageSizeInBytes=128M 
-XX:+UseFastAccessorMethods 
-XX:+UseCMSInitiatingOccupancyOnly 
-Duser.timezone=Asia/Shanghai 
-Djava.awt.headless=true
-Dfile.encoding=UTF8 
-Dsun.jnu.encoding=UTF8
"

-server                                 啟動速度慢, 運行時性能和內(nèi)存管理效率高
-clien                                  啟動速度快, 運行時性能和內(nèi)存管理效率低
-Xms                                    指定 Java 初始化堆大小, -Xms 與 -Xmx 設成一樣的值, 避免 JVM 反復重新申請內(nèi)存, 默認值為物理內(nèi)存的 1/64, 空余堆內(nèi)存小于 40% 時 JVM 增大堆直到 -Xmx 的最大限制
-Xmx                                    指定 Java 最大堆大小, 最大值設置為可用內(nèi)存的最大值的 80%, 空余堆內(nèi)存大于 70% 時 JVM 減少堆直到 -Xms 的最小限制
-Xss                                    指定每個 Java 線程堆棧大小, 每個線程堆棧大小為 1M, 線程大小不建議超過 1M
-XX:NewSize                             指定新生代內(nèi)存大小
-XX:MaxNewSize                          指定最大新生代內(nèi)存大小
-XX:+AggressiveOpts                     指定每當 JDK 版本升級時, JVM 都會使用最新加入的優(yōu)化技術
-XX:+UseBiasedLocking                   指定優(yōu)化線程鎖對線程處理自動進行最優(yōu)調(diào)配
-XX:+DisableExplicitGC                  指定程序代碼中不允許顯示調(diào)用 System.gc()
-XX:+UseConcMarkSweepGC                 指定老年代為并發(fā)收集(CMS GC), CMS GC在GC次數(shù)增多的情況下, 每次GC的響應時間很短(幾毫秒)
-XX:+UseParNewGC                        指定新生代采用多線程并行回收
-XX:MaxTenuringThreshold                指定垃圾最大年齡, 設置為 0 新生代對象不經(jīng)過 Survivor 區(qū), 直接進入老年代, 對于老年代比較多的應用(需要大量常駐內(nèi)存的應用)可以提高效率; 設置為一個較大值新生代對象會在 Survivor 區(qū)進行多次復制, 可以增加對象在新生代的存活時間, 增加在新生代即被回收的概率, 減少 Full GC 的頻率。該參數(shù)只有在串行 GC 時才有效
-XX:+CMSParallelRemarkEnabled           指定使用 UseParNewGC 的情況下, 盡量減少 Mark 的時間
-XX:LargePageSizeInBytes                指定 Java Heap 的分頁頁面大小, 內(nèi)存頁的大小不可設置過大, 會影響 Perm 的大小
-XX:+UseFastAccessorMethods             指定使用 Get, Set 方法轉(zhuǎn)成本地代碼, 原始類型的快速優(yōu)化
-XX:+UseCMSInitiatingOccupancyOnly      指定在 Oldgeneration 在使用了初始化的比例后 Concurrent Collector 啟動收集
-Duser.timezone=Asia/Shanghai           指定時區(qū)
-Djava.awt.headless=true                 兼容 Linux/Unix 下圖形報表顯示輸出
-Xmn                                    指定新生代內(nèi)存大小, 增大新生代后將會減小老年代大小, 對系統(tǒng)性能影響較大, Sun 官方推薦配置為整個堆的 3/8
-XX:CMSInitiatingOccupancyFraction      當堆滿之后, 并行收集器開始進行垃圾收集, 與 Xmn 關聯(lián)使用
-XX:+CMSIncrementalMode                 指定開啟 CMS 收集器增量模式, 增量模式經(jīng)常暫停 CMS 過程, 對應用程序線程作出完全的讓步
-XX:+UseSerialGC                        指定使用串行收集器, 老年代使用串行收集
-XX:+UseParallelGC                      指定使用并行收集器, 新生代使用并行收集
-XX:+UseParallelOldGC                   指定老年代垃圾收集方式為并行收集
-XX:ConcGCThreads                       指定并發(fā) CMS 過程運行時的線程數(shù), 如果未設置, JVM 會根據(jù)并行收集器中的 -XX:ParallelGCThreads 參數(shù)的值來計算出默認的并行 CMS 線程數(shù)
-XX:ParallelGCThreads                   指定并行收集器的線程數(shù),建議配置與CPU數(shù)目相等
-XX:OldSize                             指定老年代內(nèi)存大小

設置字符集編碼:
-Dfile.encoding=UTF8 
-Dsun.jnu.encoding=UTF8
-Djavax.servlet.request.encoding=UTF-8
-Djavax.servlet.response.encoding=UTF-8
-Dfile.encoding=UTF-8
-Duser.country=CN
-Duser.language=zh
向AI問一下細節(jié)

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

AI