一.Tomcat壓力測試,通過調整參數以及配置優化Tomcat
1.部署一個web工程,測試訪問(需安裝mysql和jdk)
1.1.1 將SQL腳本執行,生成對應的數據庫
將SQL腳本上傳到服務器,通過 cat dashboard.sql | mysql -uroot -p
1.1.2 部署項目
將該項目上傳到Linux系統中Tomcat解壓目錄下webapps文件夾
找到項目,修改jdbc.properties配置文件,根據實際情況
1.1.3 啟動Tomcat
客戶端進行訪問:http://192.168.42.123:8080/index
2.Jmeter壓力測試工具
解壓完成后進入bin目錄,雙擊jmeter.bat啟動,啟動可以通過Opetions下有個Choose Lanauge選擇簡體中文
也可修改為白色主題
2.1 新建一個線程組,線程數量為1000,循環次數為10
2.2 點擊線程組新建一個HTTP協議取樣器
采用http協議,地址為linux地址,端口為tomcat8080端口,訪問地址為/index
2.3 添加請求監控
2.4 點擊啟動進行測試
3.Tomcat優化方案
沒有進行任何配置的情況下:
平均請求處理時間:61319
Error錯誤率:44.38%
吞吐量:12.8/S
3.1 優化方案一:禁用AJP服務
停止tomcat:切換到bin目錄通過./shutdown.sh
找到tomacat解壓目錄的conf文件夾下,將server.xml當中的AJP服務注釋
bin目錄啟動:./startup.sh && tail -f ../logs/catalina.out
測試結果如下:
平均請求處理時間:23900+-
Error錯誤率:55%+-
吞吐量:20/S+-
3.2 優化方案二:啟動執行器(線程池)
測試一:`最多線程為500
初始為50
最大隊列等待個數100
將運行模式改為nio2
停止tomcat:切換到bin目錄通過./shutdown.sh
找到tomacat解壓目錄的conf文件夾下,修改server.xml
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/> <Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />
bin目錄啟動:./startup.sh && tail -f ../logs/catalina.out
平均請求處理時間:4200
Error錯誤率:9.30%
吞吐量:180/S
4.Tomcat優化方案:JVM參數進行優化
4.1 啟用並行垃圾收集器
修改catalina.sh配置文件
JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms64m -Xmx512m
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
-XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"
使用gceasy.io網站進行日志分析
得出結論:年輕代內存分配太小。整個堆內存分配太小
JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms128m
-Xmx1024m -XX:NewSize=64m -XX:MaxNewSize=256m -XX:+PrintGCDetails
-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC
-Xloggc:../logs/gc.log"
4.2 啟用G1垃圾收集器
JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms128m
-Xmx1024m -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"
G1效率最高
5.Tomcat優化時,要不斷的去測試適合當前環境的配置
總結
優化點:1.Tomcat配置
2.JVM參數進行調優