[root@localhost ~]# cat server.xml ...... <Connector port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="8192" # 設置 HTTP 頭部大小 maxThreads="5000" # 指定可建立的最大線程數, 默認值爲 200 minSpareThreads="30" # 指定最小空閒線程數, 默認值是 25 maxSpareThreads="300" # 指定最大空閒線程數 maxIdleTime="60000" # 指定線程最大空閒時間, 單位毫秒 minProcessors="30" # 服務器建立時的最小處理線程數 maxProcessors="5000" # 服務器同時最大處理線程數 enableLookups="false" # 關閉主機名反解, 值爲 true 或 false; true 返回主機名, false 返回 IP 地址 URIEncoding="utf-8" # 設置 URL 編碼 acceptCount="5000" # 監聽端口隊列最大數(不能小於 maxSpareThreads) redirectPort="8443" # 在須要基於安全通道的場合, 把客戶請求轉發到基於 SSL 的端口 disableUploadTimeout="false" # 指定上傳時是否使用超時機制, 值爲 true 或 false compression="on" # 指定是否對響應的數據進行 GZIP 壓縮, on 容許壓縮(文本壓縮), off 禁止壓縮, force 全部狀況都進行壓縮, 默認值爲 off compressionMinSize="2048" # 指定壓縮響應的最小值, 響應報文大小大於該值對報文進行壓縮, 默認值爲 2048 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 壓縮類型 noCompressionUserAgents="gozilla,traviata" # 指定對如下的瀏覽器不啓用壓縮 connnectionTimeout="30000" # 指定網絡鏈接超時時間, 0 表示永不超時, 單位毫秒 connectionUploadTimeout="150000" # 指定上傳超時時間, 單位毫秒 keepAliveTimeout="120000" # 指定長鏈接最大保持時間, 默認使用 connectionTimeout 時間, -1 表示不限制超時, 單位毫秒 maxKeepAliveRequests="1" # 最大長鏈接個數, 1 表示禁用長鏈接, -1 表示不限制長鏈接個數, 默認運行保持 100 長鏈接 connectionTimeout="5000" /> # 客戶鏈接超時的時間, 若是爲 -1 表示不限制創建客戶鏈接的時間, 單位毫秒
Tomcat 鏈接器的三種方式: bio、nio 和 apr, apr 性能最優, bio 性能最差 BIO: 同步並阻塞, 服務器實現模式爲一個鏈接一個線程(默認的工做模式) # 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: 從操做系統級別來解決異步的 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" />
[root@localhost ~]# cat context.xml # 設置上下文最大可用緩存 <Resources cachingAllowed="true" cacheMaxSize="100000" /> cachingAllowed 指定容許開啓緩存 cacheMaxSize 指定最大可用緩存, 默認 10M, 單位 KB
[root@localhost ~]# cat catalina.properties # 禁用 TLDs 掃描 tomcat.util.scan.StandardJarScanFilter.jarsToSkip = ****
JVM
優化主要修改 catalina.sh
腳本里面 JAVA_OPTS
和 CATALINA_OPTS
的參數JAVA_OPTS
: 設置 JVM
相關運行參數的變量,用於Java運行時選項start
, stop
或 run
命令執行CATALINA_OPTS
: 設置 Tomcat
相關運行參數的變量, 用於 Java
運行時選項 start
, run
命令執行javascript
JVM
內存劃分分爲新生代(Young Generation)
、老年代(Old Generation)
、永久代(Permanent Generation)
堆內存(Heap) = 新生代 + 老年代, 非堆內存 = 永久代
css
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 啓動速度慢, 運行時性能和內存管理效率高 -clien 啓動速度快, 運行時性能和內存管理效率低 -Xms 指定 Java 初始化堆大小, -Xms 與 -Xmx 設成同樣的值, 避免 JVM 反覆從新申請內存, 默認值爲物理內存的 1/64, 空餘堆內存小於 40% 時 JVM 增大堆直到 -Xmx 的最大限制 -Xmx 指定 Java 最大堆大小, 最大值設置爲可用內存的最大值的 80%, 空餘堆內存大於 70% 時 JVM 減小堆直到 -Xms 的最小限制 -Xss 指定每一個 Java 線程堆棧大小, 每一個線程堆棧大小爲 1M, 線程大小不建議超過 1M -XX:NewSize 指定新生代內存大小 -XX:MaxNewSize 指定最大新生代內存大小 -XX:+AggressiveOpts 指定每當 JDK 版本升級時, JVM 都會使用最新加入的優化技術 -XX:+UseBiasedLocking 指定優化線程鎖對線程處理自動進行最優調配 -XX:+DisableExplicitGC 指定程序代碼中不容許顯示調用 System.gc() -XX:+UseConcMarkSweepGC 指定老年代爲併發收集(CMS GC), CMS GC在GC次數增多的狀況下, 每次GC的響應時間很短(幾毫秒) -XX:+UseParNewGC 指定新生代採用多線程並行回收 -XX:MaxTenuringThreshold 指定垃圾最大年齡, 設置爲 0 新生代對象不通過 Survivor 區, 直接進入老年代, 對於老年代比較多的應用(須要大量常駐內存的應用)能夠提升效率; 設置爲一個較大值新生代對象會在 Survivor 區進行屢次複製, 能夠增長對象在新生代的存活時間, 增長在新生代即被回收的機率, 減小 Full GC 的頻率。該參數只有在串行 GC 時纔有效 -XX:+CMSParallelRemarkEnabled 指定使用 UseParNewGC 的狀況下, 儘可能減小 Mark 的時間 -XX:LargePageSizeInBytes 指定 Java Heap 的分頁頁面大小, 內存頁的大小不可設置過大, 會影響 Perm 的大小 -XX:+UseFastAccessorMethods 指定使用 Get, Set 方法轉成本地代碼, 原始類型的快速優化 -XX:+UseCMSInitiatingOccupancyOnly 指定在 Oldgeneration 在使用了初始化的比例後 Concurrent Collector 啓動收集 -Duser.timezone=Asia/Shanghai 指定時區 -Djava.awt.headless=true 兼容 Linux/Unix 下圖形報表顯示輸出 -Xmn 指定新生代內存大小, 增大新生代後將會減少老年代大小, 對系統性能影響較大, Sun 官方推薦配置爲整個堆的 3/8 -XX:CMSInitiatingOccupancyFraction 當堆滿以後, 並行收集器開始進行垃圾收集, 與 Xmn 關聯使用 -XX:+CMSIncrementalMode 指定開啓 CMS 收集器增量模式, 增量模式常常暫停 CMS 過程, 對應用程序線程做出徹底的讓步 -XX:+UseSerialGC 指定使用串行收集器, 老年代使用串行收集 -XX:+UseParallelGC 指定使用並行收集器, 新生代使用並行收集 -XX:+UseParallelOldGC 指定老年代垃圾收集方式爲並行收集 -XX:ConcGCThreads 指定併發 CMS 過程運行時的線程數, 若是未設置, JVM 會根據並行收集器中的 -XX:ParallelGCThreads 參數的值來計算出默認的並行 CMS 線程數 -XX:ParallelGCThreads 指定並行收集器的線程數,建議配置與CPU數目相等 -XX:OldSize 指定老年代內存大小 設置字符集編碼: -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