tomcat的catalina.sh腳本中JAVA_OPTS和CATALINA_OPTS的區別

前提說明

OS信息:

Linux rel65 3.10.0-514.26.2.el7.x86_64 #1 SMP Tue Jul 4 15:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Tomcat版本信息:

apache-tomcat-8.5.34

JDK版本信息:

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

 

錯誤描述

執行startup.sh腳本啓動tomcat服務時正常,但是使用相同用戶執行shutdown.sh腳本關閉tomcat服務時報錯,錯誤信息

ERROR: transport error 202: bind failed
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)

修復辦法

將tomcat/bin/catalina.sh中的JAVA_OPTS去除遠程調試用的-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005,並增加到屬性CATALINA_OPTS中。

 

原因分析

這裏需要看下JAVA_OPTS和CATALINA_OPTS在catalina.sh腳本中的作用。

先查看下備註:

#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "run" or "debug" command is executed.
#                   Include here and not in JAVA_OPTS all options, that should
#                   only be used by Tomcat itself, not by the stop process,
#                   the version command etc.
#                   Examples are heap size, GC logging, JMX ports etc.

#   JAVA_OPTS       (Optional) Java runtime options used when any command
#                   is executed.
#                   Include here and not in CATALINA_OPTS all options, that
#                   should be used by Tomcat and also by the stop process,
#                   the version command etc.
#                   Most options should go into CATALINA_OPTS.

由註釋信息可知, CATALINA_OPTS屬性裏面的參數只會在start,run和debug時被執行調用,而JAVA_OPTS在執行任何命令時均會被調用。

因此當啓動時,兩個屬性裏面的參數均會被調用,所以原先遠程調試的參數均有效。但是當調用關閉服務命令時,JAVA_OPTS的參數會被再次調用,但此時端口號已經被佔用,所以會報端口占用的錯誤。而CATALINA_OPTS則不會有影響。

所以如註釋所說,大部分參數應當放到CATALINA_OPTS中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章