一、調整tomcat參數
1、禁用APJ服務
①、修改conf目錄下的service.xml文件
#關閉服務 ./shutdown.sh #切換到conf目錄 cd ../conf/
#編輯server.xml文件
vi server.xml
啟動服務:
#切換目錄
cd ../bin #啟動服務 ./startup.sh
②、再次運行查看報告
禁用前:
禁用后:
可以看到,禁用AJP服務后,吞吐量有所提升;
當然了,測試不一定准確,需要多幾次測試才能看出是否有所提升;
2、設置線程池
通過設置線程池,調整線程池相關的參數進行測試tomcat的性能。
①、最大線程數為500,初始為50
#關閉服務
./shutdown.sh #切換到conf目錄 cd ../conf/
#編輯server.xml文件 vi server.xml
修改內容:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true"/>
啟動服務:
#切換目錄 cd ../bin #啟動服務 ./startup.sh
②、再次運行查看報告
修改前:
修改后:
可以看到,性能有所提升
③、最大線程數為1000,初始為200
#關閉服務 ./shutdown.sh #切換到conf目錄 cd ../conf/
#編輯server.xml文件 vi server.xml
修改內容:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="200" prestartminSpareThreads="true"/>
啟動服務:
#切換目錄
cd ../bin #啟動服務 ./startup.sh
④、再次運行查看報告
修改前:
修改后:
可以看到,性能有所提升,但是單純靠提升線程數量是不能一直得到性能提升的
⑤、設置最大等待隊列數
#關閉服務 ./shutdown.sh #切換到conf目錄 cd ../conf/
#編輯server.xml文件 vi server.xml
修改內容:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="200" prestartminSpareThreads="true"
maxQueueSize="100"/>
啟動服務:
#切換目錄 cd ../bin #啟動服務 ./startup.sh
⑥、再次運行查看報告
修改前:
修改后:
結論:響應時間、吞吐量這2個指標需要找到平衡才能達到更好的性能。
2、設置nio2的運行模式
#關閉服務 ./shutdown.sh #切換到conf目錄 cd ../conf/
#編輯server.xml文件 vi server.xml
修改內容:
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />
啟動服務:
#切換目錄 cd ../bin #啟動服務 ./startup.sh
再次運行查看報告 :
可以看到,平均響應時間有縮短,吞吐量有提升,可以得出結論:nio2的性能要高於nio。
二、調整JVM參數
測試通過jvm參數進行優化,為了測試一致性,依然將最大線程數設置為500,啟用nio2運行模式。
1、設置並行垃圾回收器
#關閉服務 ./shutdown.sh #修改文件 vi catalina.sh
修改的內容:
JAVA_OPTS="-XX:+UseParallelGC -XX:+UseParallelOldGC -Xms64m -Xmx512m -XX:+PrintGCDetails
-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"
啟動服務:
./startup.sh
再次運行查看報告 :
2、查看gc日志文件
將gc.log文件上傳到gceasy.io查看gc中是否存在問題
問題一:
在關鍵指標中可以看出,吞吐量表現不錯,但是gc時,線程的暫停時間稍有點長。
問題二:
通過GC的統計可以看出:
年輕代的gc有70次,次數稍有多,說明年輕代設置的大小不合適需要調整
FullGC有8次,說明堆內存的大小不合適,需要調整
問題三:
從GC原因的可以看出,年輕代大小設置不合理,導致了多次GC。
3、調整年輕代大小
#關閉服務
./shutdown.sh #修改文件 vi catalina.sh
修改的內容:
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"
將初始堆大小設置為128m,最大為1024m
初始年輕代大小64m,年輕代最大256m
啟動服務:
./startup.sh
再次運行查看報告 :
查看GC報告:


可以看到,GC次數明顯減少,說明調整有效
4、設置G1垃圾回收器
#關閉服務
./shutdown.sh #修改文件 vi catalina.sh
修改的內容:
JAVA_OPTS="-XX:+UseG1GC -XX:MaxGCPauseMillis=100 -Xms128m -Xmx1024m -XX:+PrintGCDetails
-XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:../logs/gc.log"
啟動服務:
./startup.sh
再次運行查看報告 :
查看GC報告:
可以看到,吞吐量有所提升,響應時間也有所縮短。
5、小結
通過上述的測試,可以總結出,對tomcat性能優化就是需要不斷的進行調整參數,然后
測試結果,可能會調優也可能會調差,這時就需要借助於gc的可視化工具來看gc的情
況,再做出決策應該調整哪些參數