本文會講解Tomcat遠程Debug調試,Tomcat-manager監控(簡單帶過),psi-probe監控和Tomcat參數調優。本文基於Tomcat8.5版本。
Tomcat遠程Debug:
遠程Debug有些時候在通過日志無法找到原因的時候還是很有用的,所以了解使用很有必要。使用JDWP實現遠程Debug,定義了調試器和被調試jvm
之間的協議
具體可以參考:https://www.ibm.com/developerworks/cn/java/j-lo-jpda3/
首先修改遠程Tomcat的startup.sh最后加上jpda
exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"
然后修改catalina.sh
通過搜索jpda,我們可以看到JPDA_OPTS的解釋定義,添加了jpda啟動,會生成最后兩行輸出
# JPDA_OPTS (Optional) Java runtime options used when the "jpda start" # command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS, # and JPDA_SUSPEND are ignored. Thus, all required jpda # options MUST be specified. The default is: # # -agentlib:jdwp=transport=$JPDA_TRANSPORT, # address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND
JPDA_TRANSPORT:jpda 端口
JPDA_ADDRESS:jpda IP地址
然后修改紅字部分,為定義的jpda的IP地址,默認localhost:8000,現在改成54321(隨意改,只要不會重復),供遠程debug使用
if [ "$1" = "jpda" ] ; then if [ -z "$JPDA_TRANSPORT" ]; then JPDA_TRANSPORT="dt_socket" fi if [ -z "$JPDA_ADDRESS" ]; then JPDA_ADDRESS="54321" fi if [ -z "$JPDA_SUSPEND" ]; then JPDA_SUSPEND="n" fi if [ -z "$JPDA_OPTS" ]; then JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND" fi CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS" shift
我們隨便寫一個請求,然后把項目傳到服務器上Tomcat的webapp目錄,然后重啟Tomcat
在eclipse或者Intellij idea中配置remote調試,這里演示的是idea中的使用
然后添加IP地址和jpda port
然后debug啟動remote,控制台會顯示連接到目標VM
然后通過瀏覽器或者postman等工具進行請求,在ide中就可以收到請求,然后進行debug
tomcat-manager監控:
低版本Tomcat默認開啟,高版本Tomcat因為一些安全原因默認關閉了。文檔地址:本機Tomcat安裝地址\webapps\docs\
步驟一:conf/tomcat-users.xml添加用戶
<role rolename="tomcat"/> <role rolename="manager-status"/> <role rolename="manager-gui"/> <user username="tomcat" password="123456" roles="tomcat,manager-status,manager-gui"/>
步驟二:conf/Catalina/localhost/manger.xml配置允許的遠程連接
新建這個manager.xml文件,因為這個路徑不存在的,需要重新創建,文件內容如下:
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="${catalina.home}/webapps/manager" privileged="true" antiResourceLocking="false" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1" /> </Context>
步驟三:重啟
打開:127.0.0.21:8080/manager/html,界面如下:
點擊最右邊的Server Status,進入我們比較關心的內容
實現jvm各個內存區域內存使用情況,我們使用的是8080端口,最大線程數200,當前線程數10,busy線程數,keep alive socket為1,最大處理時間,
處理時間,請求數,錯誤請求數,接收數據,發送數據
psi-probe監控:
相比tomcat-manager監控功能更加強大,地址:https://github.com/psi-probe/psi-probe,下載之后,解壓,執行
mvn clean package -Dmaven.test.skip,在web/target存在probe.war,復制到Tomcat的webapp目錄,然后啟動Tomcat,順便吐槽一下,這個打包時間
巨長。。。
PS:psi-probe同樣需要tomcat-manager涉及的兩個配置,完全相同的
通過http:127.0.0.1:8080/probe/訪問地址
可以選擇多種語言,包括中文
可以查看數據源,直接選取war包發布到Tomcat、probe日志、線程
可以查看不同信息:
系統信息:
內存使用情況:
連接器:
Tomcat參數優化:
主要包括內存優化、線程優化、配置優化,其中內存優化會在后面jvm優化的時候統一講一下,這里主要針對線程參數和其他參數配置
線程相關配置:
maxConnections:
最大連接數,Tomcat8以后,連接使用NIO,默認接收10000個連接,不再像之前一樣,一個請求使用一個線程。如果APR,默認8192,但是
Windows下APR默認為1024的倍數,因為一些性能問題這樣設計的。
acceptCount:
當請求超過maxConnections之后,后續的請求會存到隊列中,能夠存儲的請求數量就是acceptCount,默認100。后續請求的請求就會被拒絕了。
maxThreads:
最大工作線程數量,同一時間處理的並發請求數,默認200,我們可以通過前面講述的監控工具查看工作線程數量、內存、CPU,來決定工作線程數量
minSpareThreads:最小空閑的工作線程,不要設置太小,否則如果請求突然增加,就會出現一個停頓
其他相關配置:
autoDeploy:
Tomcat在運行的時候是否定期檢查有新的應用或者應用更新,生產環境下一定要設置為true,我們可以在server.xml看到這個參數
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
enableLookups:
如果要調用request.getRemoteHost()以執行DNS查找以返回遠程客戶端的實際主機名,則設置為true。 設置為false以跳過DNS查找並以字符串形式
返回IP地址(從而提高性能)。 默認情況下,DNS查找被禁用,Tomcat8.55已經對這個參數做了優化。生產環境下設置為false,DNS查詢和網絡相關,會
影響性能。
reloadable:
如果希望Catalina監視/ WEB-INF / classes /和/ WEB-INF / lib中的類以進行更改,則設置為true;如果檢測到更改,則自動重新加載Web應用程序。 這
個參數在自己本地開發環境可以使用,生產環境需要設置為false。