Tomcat:在哪里配置 jmx JAVA_OPTS 或 CATALINA_OPTS

Tomcat:在哪里配置 jmx JAVA_OPTS 或 CATALINA_OPTS

我在 ubuntu 上安装了 Tomcat。我想启用 JMX 进行监控,因此在 catalina.sh 中我修改JAVA_OPTS为:

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=4998 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

重新启动后,JMX 可以工作了,但是当我想停止 tomcat 时,出现了以下错误:

错误:代理抛出异常:java.rmi.server.ExportException:端口已在使用中:5555;嵌套异常为:java.net.BindException:地址已在使用中:

经过一些 Google 搜索,我发现我们已经写入了所有 JMX 配置,CATALINA_OPTS但是在 CATALINA_OPTS 中写入所有配置后,我仍然无法连接。

答案1

catalina.sh在旁边创建一个名为 的文件setenv.sh。这样,您的所有更改都会位于单独的文件中。

使用CATALINA_OPTS而不是JAVA_OPTS因为CATALINA_OPTS仅在启动时使用而JAVA_OPTS用于启动和停止。

答案2

如果你从软件包中安装了 Tomcat,则必须修改文件中的 JAVA_OPTS

/etc/default/tomcat...

答案3

嗨,为了使答案更加清楚,我添加了以下内容。

setenv.sh我在 下创建了一个文件$CATALINA_HOME/bin/。文件内容如下。

JAVA_OPTS="-Dcom.sun.management.jmxremote=true \
                   -Dcom.sun.management.jmxremote.ssl=false \
                   -Dcom.sun.management.jmxremote.authenticate=false \
                   -Djava.rmi.server.hostname=192.168.40.10"

没有必要在 catalina.sh 中添加文件 setenv.sh,因为通过查看名为 setenv.sh 的文件,tomcat 会自动接受参数。然后我在 中添加了一行粗体字样,如下所示catalina.sh

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
  . "$CATALINA_HOME/bin/setenv.sh"
fi
***export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=9090"***

这样我们就可以避免 Tomcat 中的端口冲突问题。谢谢。

答案4

端口 5555 上有运行程序吗?您可以尝试运行

lsof -i :5555 or netstat -tulpn | grep :\5555 

查看该端口上正在运行什么。

相关内容