有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajmx及其在Tomcat内部Docker上的调试

我正在尝试设置IntelliJ以连接到Docker容器中运行的Tomcat实例。我希望能够使用远程调试,并使用JMX进行远程部署

我可以使用环境变量启用远程调试

JPDA_ADDRESS=8000
JPDA_TRANSPORT=dt_socket

通过使用catalina.sh jpda run启动Tomcat,远程调试工作不会出现问题

我也可以选择使用

CATALINA_OPTS='-agentlib:jdwp=transport=dt_socket,address=8000,suspend=n,server=y'

然后我就不需要使用catalina.sh jpda run

无论我做什么,我都无法让JMX工作。我验证了我在/usr/local/tomcat/lib`中有catalina-jmx-remote.jar

我已尝试将CATALINA_OPTSJAVA_OPTS设置为

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Djava.rmi.server.hostname=192.168.99.100
-Dcom.sun.management.jmxremote.ssl=false

我已经验证了192.168.99.100是我的docker机器的IP。我曾尝试使用VisualJM和IntelliJ连接到JMX,但不起作用。我已验证端口1099是否已打开并可从主机使用

Tomcat正在接收JMX参数

20-Apr-2016 23:50:14.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Djava.rmi.server.hostname=192.168.99.100 -Dcom.sun.management.jmxremote.ssl=false

为什么我不能让JMX工作?任何日志中都没有可用的信息,无论我如何尝试,这都不会起作用

编辑:lsof -i :1099显示该端口上没有运行任何内容

我在Mac OS X上运行。这是一台docker机器,但我相信docker在Mac上使用virualbox,因为它不能在本机上运行容器。 我已经映射了端口docker ps显示0.0.0.0:1099->1099/tcp, 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp。端口80808000工作正常,因此1099也应该正确映射


共 (1) 个答案

  1. # 1 楼答案

    当我为jmxremote使用0.0.0.0时,我能够连接。主机和服务器。主机名

     HOST=0.0.0.0
        java -Xmn100M  -XX:+PrintGCDetails  -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -Xmx384M $JAVA_OPTS\
         -Dcom.sun.management.config.file=/opt/app/management.properties \
         -Djava.util.logging.config.file=/opt/app/logging.properties \
         -Dcom.sun.management.jmxremote.port=$JMX_PORT \
         -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT \
         -Dcom.sun.management.jmxremote.host=$HOST \
         -Djava.rmi.server.hostname=$HOST \
         -jar /opt/app/app.jar