1. JVM 優化(Tomcat 啓動行參數)
Linux 修改 catalin.sh
Windows 修改 catalin.bat
Linux系統中tomcat的啓動參數
export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts
-XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC
-XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true "
Windows系統中tomcat的啓動參數
set JAVA_OPTS=-server -Xms1400M -Xmx1400M -Xss512k
-XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M
-XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly
-Djava.awt.headless=true
-server 生產環境必須添加此參數,能夠改變 Tomcat 的運行模式,更大、更高的併發處理能力,更快更強捷的JVM垃圾回收機制,能夠得到更多的負載與吞吐量。
-Xms–Xmx JVM內存設置,建議設置成同一個值,能夠在命令行中使用 java -Xmx1500m -version 來測試當前服務器能夠設置的最大內存。(-Xmx 的值太大時,JVM 沒法啓動)
-Xmn 年輕代 整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代通常固定大小爲64m。
-Xss 是指設定每一個線程的堆棧大小。通常不超過 1M。
-XX:+AggressiveOpts 根據 JDK 的不一樣而採用不一樣的優化策略。
-XX:+UseBiasedLocking 優化線程鎖。
-XX:PermSize=128M-XX:MaxPermSize=256M 非堆內存初始值和最大值。默認值爲物理內存的 1/64 和 1/4。
-XX:+DisableExplicitGC 控制程序代碼中不容許顯示調用 System.gc()。
-XX:+UseParNewGC 對年輕代採用多線程並行回收,這樣收得快。
-XX:+UseConcMarkSweepGC 使用更好的 GC 技術。
-XX:+CMSParallelRemarkEnabled 在使用UseParNewGC 的狀況下, 儘可能減小 mark 的時間
-XX:+UseCMSCompactAtFullCollection 減小 Memory 碎片。
-XX:LargePageSizeInBytes 指定 Java heap 的分頁頁面大小
-XX:+UseFastAccessorMethods get,set 方法轉成本地代碼
-XX:+UseCMSInitiatingOccupancyOnly 指示只有在 oldgeneration 在使用了初始化的比例後concurrent collector 啓動收集
-XX:CMSInitiatingOccupancyFraction=70 年老代到 70% 滿的時候開始執行對年老代的併發垃圾回收((Xmx-Xmn)*(100- CMSInitiatingOccupancyFraction)/100>=Xmn)
-Djava.awt.headless=true 解決圖片在 Linux 上沒法顯示圖片的問題
2.Tomcat容器內的優化
修改 server.xml文件
<Connector port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
acceptCount="300" maxThreads="300" maxProcessors="1000" minProcessors="5"
useURIValidationHack="false"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/JavaScript,text/css,text/plain"
redirectPort="8443"
/>
URIEncoding="UTF-8"
maxSpareThreads 最大空閒線程數,大於這個數將終止多餘的線程。
minSpareThreads 初始化線程數。
enableLookups 不使用 Look。
connectionTimeout 鏈接超時毫秒數。
maxThreads 即 Tomcat 可建立的最大的線程數,即最大併發數。
acceptCount 當線程數達到maxThreads後,後續請求會被放入一個等待隊列,這個acceptCount是這個隊列的大小,若是這個隊列也滿了,就直接refuse connection。
maxProcessors與minProcessors 最大線程數和最小線程數。
useURIValidationHack 減小對一些url的沒必要要的檢查從而減省開銷。
enableLookups="false" 關閉DNS查詢。
disableUploadTimeout
compression 給Tomcat配置gzip壓縮(HTTP壓縮)功能。
3.Tomcat 性能檢測
VisualVM監控( JDK 自帶)
推薦使用。
內存分析,CPU 分析,線程分析等。
LambdaProbe監控
須要打成 war 放入 tomcat webapp 目錄下。
JProfiler監控
商業的主要用於檢查和跟蹤系統的性能的工具。須要在服務器端安裝 JProfiler 軟件。
參考: