我在 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
查看该端口上正在运行什么。