面試刷題32:你對tomcat做了哪些效能調優?
背景
java程式設計師的開發的java應用程式,一般都會選擇使用tomcat釋出,但是:
如何充分的掌控tomcat,並讓它發揮最優效能呢?
這也是面試的熱點問題,結合多年的工作實踐,我是李福春,今天總結一下。
tomcat的使用
下載
現在最新的穩定版本是tomcat9, 下載頁面:https://tomcat.apache.org/download-90.cgi
5種下載包的區別
一般我們選擇的是 core包執行tomcat,或者直接選擇docker的映象來執行;
tomcat的目錄說明:
安裝
直接解壓即可,解壓指令: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' />
監控頁面如下圖:
server status: 可以看到tomcat和jvm的版本資訊,jvm的分割槽資訊,tomcat內部執行緒池狀態;
manager-app: 管理tomcat下執行的應用,提供控制按鈕,啟動,停止,重啟,解除安裝,以及不停服安裝新的應用;
host-manger:提供了虛擬主機的管理,即配置別名和二級路徑到tomcat的應用。
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預設不啟用執行緒池,可以啟用執行緒池提高執行緒的利用率
執行緒池引數:
定義執行緒池
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
配置Connector啟用
<connector executor="tomcatThreadPool">
connector引數
tomcat的jvm引數調優
GC優化
#gc優化
JAVA_GC="-XX:SurvivorRatio=10
-XX:MaxTenuringThreshold=15
-XX:NewRatio=2
-XX:+DisableExplicitGC
-Djava.security.egd=file:/dev/./urandom"
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 初始執行緒數
小結
本篇回顧了tomcat的基礎知識。
以及使用tomcat內建的監控程式對java應用進行監控的一些基礎知識點。
然後結合工作經驗,從io,執行緒池,jvm三個方面對tomcat進行調優
原創不易,點贊關注支援一下吧!轉載請註明出處,讓我們互通有無,共同進步,歡迎溝通交流。
我會持續分享Java軟體程式設計知識和程式設計師發展職業之路,歡迎關注,我整理了這些年程式設計學習的各種資源,關注公眾號‘李福春持續輸出’,傳送'學習資料'分享給你!