我想使用visualvm来检查在docker容器中的karaf中运行的线程。
我做了什么:
需要帮助。
答案 0 :(得分:1)
问题是RMI协议,它不能很好地处理提供RMI端点的主机(Docker主机)不是RMI服务器的主机(Docker容器中的VM)的情况。
我开始工作的方式是
export EXTRA_JAVA_OPTS=="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=$JMX_RMI_PORT -Dcom.sun.management.jmxremote.port=$JMX_REMOTE_PORT -Djava.rmi.server.hostname=$HOST_HOSTNAME"
我使用docker-compose设置环境,但只要在主机上只运行一个包含图像的容器,就可以用固定值替换环境变量。我分别使用1097和1098作为RMI和REMOTE端口。这里有两件事很重要:
java.rmi.server.hostname
是泊坞主机的主机名或IP,而不是容器的IP 假设您使用上面的端口,然后连接到
service:jmx:rmi:///jndi/rmi://<your_docker_host>:1098/jmxrmi
现在应该有效。
我从来没有让Karaf的JMX加速控制工作。
使用JMXMP而不是RMI for JMX可能会让事情变得更容易,但开箱即用的Karaf不支持它。