1. 程式人生 > >面試刷題32:你對tomcat做了哪些效能調優?

面試刷題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軟體程式設計知識和程式設計師發展職業之路,歡迎關注,我整理了這些年程式設計學習的各種資源,關注公眾號‘李福春持續輸出’,傳送'學習資料'分享給你!