Tomcat--遠程Debug以及參數配置調優


本文會講解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。

 


免責聲明!

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



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