詳解tomcat遠(yuǎn)程調(diào)試配置

遠(yuǎn)程調(diào)試應(yīng)用場(chǎng)景:

有時(shí)候一個(gè)完整的工程沒辦法在本地跑起來,因?yàn)榭赡苄枰鞣N資源,比如rpc,redis,hive,hbase,mysql和其他關(guān)聯(lián)的應(yīng)用。這時(shí)候有問題可能就需要在公司的測(cè)試環(huán)境上遠(yuǎn)程調(diào)試一下代碼了。
之前一直都是直接用的公司配好的tomcat,可以直接遠(yuǎn)程調(diào)試,最近想在自己本地的tomcat上配置下遠(yuǎn)程調(diào)試的功能,google了好多資料,發(fā)現(xiàn)每個(gè)文章說的都有些差別,決定自己研究明白,做了這篇總結(jié)。

以tomcat7.0.79為例:

startup.sh:

tomcat在bin目錄中提供了該啟動(dòng)腳本,最后一行是:

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

根據(jù)之前定義的變量,實(shí)際就是:

catalina.sh start $@

catalina.sh:

tomcat實(shí)際的啟動(dòng)腳本是catalina.sh,進(jìn)入catalina.sh中可以看到這樣一段:

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  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
fi

如果第一個(gè)參數(shù)是jpda的話,則會(huì)在CATALINA_OPTS中額外加上這些啟動(dòng)參數(shù):

agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND

這幾個(gè)參數(shù)的意思不細(xì)說了,可以google。

最終tomcat啟動(dòng)時(shí)的jvm參數(shù)是JAVA_OPTSCATALINA_OPTS


總結(jié):

所以最簡單的開啟遠(yuǎn)程調(diào)試的方式就是修改startup.sh的最后一行:

exec "$PRGDIR"/"$EXECUTABLE" jpda start "$@"

jpda參數(shù)都用默認(rèn)值,想要修改參數(shù)就可以根據(jù)自己喜好在startup.sh中export參數(shù),或者在catalina.sh中直接指定。

為了統(tǒng)一管理tomcat的額外啟動(dòng)參數(shù),我仿照公司的配置,直接在startup.sh中指定了參數(shù)(如上文所說catalina.sh中最后啟動(dòng)tomcat的參數(shù)是JAVA_OPTSCATALINA_OPTS):

export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=127.0.0.1:9000"

TIPS:

address默認(rèn)的是8000,這樣會(huì)不安全,來自任意ip的8000端口都可以訪問,所以我設(shè)置為127.0.0.1:9000,只有本機(jī)的9000端口才可以訪問。如果別的機(jī)器想要遠(yuǎn)程調(diào)試,可以socat TCP4-LISTEN:9001,fork,range=xxx/32 TCP4:127.0.0.1:9000,xxx填寫別的機(jī)器ip,別的機(jī)器連接9001端口,然后轉(zhuǎn)發(fā)到9000。至于使用idea還是eclipse設(shè)置遠(yuǎn)程調(diào)試就可以直接百度了。

至于-Xdebug -Xrunjdwp-agentlib這兩種配置方式,主要是jdk版本問題,老版本用第一種,新版本用第二種(第一種也兼容),可以參考這篇文章

肥肥小浣熊
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容