背景
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軟件編程知識和程序員發展職業之路,歡迎關注,我整理了這些年編程學習的各種資源,關注公眾號‘李福春持續輸出’,發送'學習資料'分享給你!