Tomcat8優化--調整tomcat參數和JVM參數進行優化


一、調整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的情 況,再做出決策應該調整哪些參數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM