面試刷題32:你對tomcat做了哪些性能調優?


image.png

背景

java程序員的開發的java應用程序,一般都會選擇使用tomcat發布,但是:
如何充分的掌控tomcat,並讓它發揮最優性能呢?

這也是面試的熱點問題,結合多年的工作實踐,我是李福春,今天總結一下。

tomcat的使用

下載

現在最新的穩定版本是tomcat9, 下載頁面:https://tomcat.apache.org/download-90.cgi

5種下載包的區別

file

一般我們選擇的是 core包運行tomcat,或者直接選擇docker的鏡像來運行;

tomcat的目錄說明:

file

安裝

直接解壓即可,解壓指令:tar -zxvf tomcat-xxx.tar.gz

啟動和停止

按照running.txt中的說明指導, 兩種方式啟動:

1, sh ${catalina.home}/bin/startup.sh 
2,  sh ${catalina.home}/bin/catalina.sh start

對應的兩種方式停止tomcat:

1, sh ${catalina.home}/bin/shutdown.sh
2,  sh ${catalina.home}/bin/catalina.sh stop 

日志

tomcat產生的日志分成4類

1, catalina.date.out 最近的所有級別的日志;
2,localhost-date.log 錯誤日志

實時查看日志指令: tail -f catalina.out

AJP協議

一般用在tomcat跟其它HTTP服務器建立連接。

比如Apache+Tomcat做動靜態分離:

apache處理所有的靜態資源;

apache通過JK(負載均衡組件)轉發動態資源請求到Tomcat,通過AJP協議。

tomcat的監控

保留默認tomcat下的webapps的 ROOT, host-manager , manager 應用,就可以監控單個tomcat節點的狀態。

默認是不可以訪問的,需要增加用戶和權限才能看到,否則會報403;

增加方法: conf/tomcat-user.xml

<role rolename='admin' />
...
<user username='admin' password='admin' roles='admin,admin-gui,admin-script,
manager-script,manager-gui,manager-jmx,manager-status' />

監控頁面如下圖:

image.png
server status: 可以看到tomcat和jvm的版本信息,jvm的分區信息,tomcat內部線程池狀態;
image.png

manager-app: 管理tomcat下運行的應用,提供控制按鈕,啟動,停止,重啟,卸載,以及不停服安裝新的應用;
image.png

host-manger:提供了虛擬主機的管理,即配置別名和二級路徑到tomcat的應用。
image.png

tomcat的IO調優

tomcat9中默認使用的nio處理java的io.
可以從日志中和配置文件中看到。

09-Apr-2020 07:46:27.606 信息 [main] org.apache.coyote.AbstractProtocol.start 
開始協議處理句柄["http-nio-8080"]

APR優化IO

使用apr(Apache Portable Runtime),從操作系統層面解決了異步io的問題,可以大幅度提高性能。
如果linux安裝了apr和tomcat-native,則tomcat啟動就支持了apr;

NIO優化老版本的BIO

老版本的tomcat如果采用了BIO(通過日志可以看出),可以調整為NIO,調整方法:
conf/server.xml

老的配置:

<connector protocol="HTTP/1.1" />

新的配置:

//tomcat6選擇nio1
<connector protocol="org.apache.coyote.http11.Http11NioProtocol" />
//tomcat8選擇nio2,apr性能更好
<connector protocol="org.apache.coyote.http11.Http11Nio2Protocol" />

<connector protocol="org.apache.coyote.http11.Http11AprProtocol" />

tomcat的線程池調優

tomcat默認不啟用線程池,可以啟用線程池提高線程的利用率

線程池參數:

file

定義線程池

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>

配置Connector啟用

<connector executor="tomcatThreadPool">

connector參數

file

tomcat的jvm參數調優

GC優化

#gc優化
JAVA_GC="-XX:SurvivorRatio=10 
-XX:MaxTenuringThreshold=15 
-XX:NewRatio=2 
-XX:+DisableExplicitGC 
-Djava.security.egd=file:/dev/./urandom"

file

jvm和線程池優化

JVM_LEVEL="info"
JVM_Xms="100m"
JVM_Xmx="2048m"
JVM_Xmn="600m"
JVM_Xss="256k"
TOMCAT_acceptCount=4096 線程可以接受的請求數量
TOMCAT_maxThreads=512 最大線程數
TOMCAT_minSpareThreads=512 初始線程數

file

小結

本篇回顧了tomcat的基礎知識。

以及使用tomcat內置的監控程序對java應用進行監控的一些基礎知識點。

然后結合工作經驗,從io,線程池,jvm三個方面對tomcat進行調優

原創不易,點贊關注支持一下吧!轉載請注明出處,讓我們互通有無,共同進步,歡迎溝通交流。
我會持續分享Java軟件編程知識和程序員發展職業之路,歡迎關注,我整理了這些年編程學習的各種資源,關注公眾號‘李福春持續輸出’,發送'學習資料'分享給你!


免責聲明!

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



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