Tag: jmx

我如何通过Kubernetespipe理的Docker容器连接到JMX?

我正尝试使用客户端(如JConsole,Java Mission Control或Java)连接到我的Java应用程序(Java 8和Spring Boot 1.4和Tomcat)上定义的1099(默认情况下)的JMX端口VisualVM,但我遇到一个错误: java.rmi.ConnectException: Connection refused to host: 10.xxx.xxx.xx, nested exception is: java.net.ConnectException: Connection timed out … 请注意,我隐藏了确切的主机IP,但它是我的服务部署在特定Kubernetespipe理的Docker容器的Pod IP。我尝试使用以下服务URL连接到JMX端口: jconsole service:jmx:rmi://<nodeIP>:<nodePort>/jndi/rmi://<nodeIP>:<nodePort>/jmxrmi 我知道JMX会打开一个随机的高端口 ,我试图通过包含一个自定义的@Configuration类来强制这个高端口也服务于端口1099 。 我已经进入了实际的容器和荚运行 netstat -tulpn 看到打开的端口,我已经证实,唯一打开的端口是8443(我的应用程序正在运行)和1099(JMX端口); 这表明我的class级工作。 我还确保端口1099在Kubernetes方面是开放的,所以这不是什么阻塞它。 由于围绕JMX远程连接的许多答案都有build议,所以我尝试了以下Java选项的许多变体,但都无济于事: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.jmi.port=1099 -Djava.rmi.server.hostname=0.0.0.0 答案build议强制JMX端口和RMIregistry端口是相同的,但没有一个工作。 我认为这个问题可能是因为主机名(我尝试使用-Djava.rmi.server.hostname = 0.0.0.0进行dynamic化)无法parsing为每次部署服务时创build的不同主机名(pod IP) 。 因此,看起来连接无法完成,因为在部署服务后,JMX无法查看Kubernetes分配的主机名。 有没有办法让JMX识别Kubernetes主机名? 或者,有没有其他方式通过Kubernetes部署的服务远程连接到JMX端口? 编辑1:我已经做了一些额外的研究,也许一个可选的JMXMP而不是RMI可能工作? 有没有人得到这个与Tomcat的工作?

VisualVM连接到托pipe在Docker上的Tomcat

我试图configuration一个从VisualVM到托pipe在远程Docker机器上的Tomcat的JMX连接: locahost with VisualVM –> server with docker (192.168.23.8) –> Tomcat container 我的Dockerfile是: FROM centos:centos6 RUN yum upgrade -y \ && yum -y install java-1.7.0-openjdk \ && yum -y install tar \ && yum clean all COPY apache-tomcat-7.0.64.tar.gz /tmp/ RUN mkdir /opt/tomcat RUN tar -xzvf /tmp/apache-tomcat-7.0.64.tar.gz –directory /opt/tomcat/ –strip 1 RUN rm /tmp/apache-tomcat-7.0.64.tar.gz COPY catalina-jmx-remote.jar […]

Cassandra docker – 无法通过JMX连接

我很难通过JMX连接到docker集装箱内的Cassandra。 我在AWS中运行(这意味着我得到一个NAT的IP)。 以下是我尝试过的东西: 创build了jmxremote.password文件 添加了jmxremote.password文件来启用jmx连接。 我从中创build我的图像的Dockerfile: 从cassandra:最新 COPY ./jmxremote.password /etc/cassandra/jmxremote.password 运行chmod 400 /etc/cassandra/jmxremote.password COPY ./jmxremote.password /etc/java-8-openjdk/management/jmxremote.password 我使用上面的docker文件构build了图像 运行容器: docker运行-P -d -e“JVM_OPTS = -Djava.rmi.server.hostname = 10.0.1.12”-e“LOCAL_JMX = no”-e 这会引发以下exception: java.rmi.ConnectException: Connection refused to host: 10.0.1.12; nested exception is: java.net.ConnectException: Connection refused at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130) at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source) at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2432) at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:308) […]

JMX和在Docker内的Tomcat上进行debugging

我正在尝试设置IntelliJ连接到运行在Docker容器中的Tomcat实例。 我希望能够使用远程debugging,并使用JMX进行远程部署。 我可以使用环境variables启用远程debugging JPDA_ADDRESS=8000 JPDA_TRANSPORT=dt_socket 并通过启动Tomcat与catalina.sh jpda run ,所以远程debugging工作没有问题。 我也可以用这个替代 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_OPTS和JAVA_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 我已经validation了192.168.99.100是我的docker机器的IP。 我试图用VisualJM和IntelliJ连接到JMX,它不起作用。 我已经validation端口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 […]

DC / OS JMX访问

我有一个部署到azure色的dc / os群集。 我已经部署到集群与我的Java应用程序的容器。 但是我不能通过jmx访问它。 我们来看看部署一个standart tomcat镜像的例子: 1)我打开一个端口8081根据下一条指令: https : //docs.microsoft.com/en-us/azure/container-service/container-service-enable-public-access#open-a-port-portal 。 2)我使用下一个json部署服务: { "id": "/tomcat", "instances": 1, "cpus": 1, "mem": 512, "container": { "type": "DOCKER", "docker": { "image": "tomcat:8.0", "network": "BRIDGE", "portMappings": [ { "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 }, { "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 } ] } }, […]

如何将VisualVM附加到在Docker容器中运行的简单Java进程

其实我想要一个适用于JEE容器的解决scheme,特别是Glassfish,但是当我尝试了许多设置的组合并且没有成功之后,我把设置简化为最简单的情况。 这是我在Docker容器中启动的Hello World守护进程。 我想附加jconsole或VisulaVM到它。 一切都在同一台机器上。 public class Main { public static void main(String[] args) { while (true) { try { Thread.sleep(3000); System.out.println("Hello, World"); } catch (InterruptedException e) { break; } } } } Dockerfile FROM java:8 COPY . /usr/src/myapp WORKDIR /usr/src/myapp RUN javac Main.java CMD ["java", "Main"] build设: docker build -t hello-world-daemon . 运行: docker […]

如何从外部访问docker中的JMX接口?

我正在试图远程监视docker中运行的JVM。 configuration如下所示: 机器1:在Ubuntu机器上的docker上运行一个JVM(在我的情况下,运行kafka) 本机的IP为10.0.1.201; 在Docker中运行的应用程序在172.17.0.85。 机器2:运行JMX监视 请注意,当我从机器2运行JMX监视时,它会失败,出现以下错误(注意:运行jconsole,jvisualvm,jmxtrans和node-jmx / npm:jmx时会发生同样的错误): 对于每个JMX监视工具,失败时的堆栈跟踪如下所示: java.rmi.ConnectException: Connection refused to host: 172.17.0.85; nested exception is java.net.ConnectException: Operation timed out at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) (followed by a large stack trace) 现在有趣的部分是当我运行相同的工具(jconsole,jvisualvm,jmxtrans和node-jmx / npm:jmx)在运行docker(从上面的机器1)的同一台机器上JMX监视工作正常。 我认为这表明我的JMX端口是活动的并且正常工作,但是当我从机器2远程执行JMX监控时,它看起来像JMX工具不能识别内部docker IP(172.17.0.85) 以下是JMX监视工作的计算机1上的相关(我认为)networkingconfiguration元素(请注意docker ip,172.17.42.1): docker0 Link encap:Ethernet HWaddr … inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr:… Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 […]

使用映射端口访问Docker容器内的JMX

我正在尝试访问JMX的Docker容器内运行的应用程序。 这与此问题类似,解决scheme在Docker镜像中的端口映射到映像外的相同端口时起作用。 但是,我有时想将端口映射到不同的端口。 我在托pipe应用程序中设置这些属性。 -Dcom.sun.management.jmxremote.port=9832 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.rmi.port=9832 -Djava.rmi.server.hostname=192.168.99.100 -Djava.rmi.server.logCalls=true 当Docker容器将端口9832映射到9832时,这工作正常。我可以通过JConsole或我们自己的应用程序进行连接。 如果端口映射到另一个端口,那么我无法从JConsole或我们的应用程序访问应用程序。 我怀疑需要一个或两个端口号作为外部端口(就像java.rmi.server.hostname是外部地址,而不是内部地址)。 但是,所有四个端口号组合都会失败。 其中两个组合不会产生来自服务器的日志输出。 一个(我忘记了)产生这个输出: Feb 09, 2016 10:35:54 PM org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl start INFO: AMQ221001: Apache ActiveMQ Artemis Message Broker version 1.1.0 [nodeID=7a6e038e-cf7d-11e5-b566-31dc437b2d1a] HTTP Server started at http://0.0.0.0:8161 Feb 09, 2016 10:36:06 PM sun.rmi.server.UnicastServerRef logCall FINER: RMI TCP Connection(1)-192.168.99.1: [192.168.99.1: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease […]

通过JMX访问docker容器中运行的tomcat

我想通过JMX获得tomcat的性能。 Tomcat版本是7,Java版本是1.7.0_79。 Tomcat在Docker的容器上运行。 端口映射已经build立如下。 docker run -itd -p 18080:8080 -p 19998:19998 -p 62911:62911 sad_jang2 bash 在tomcat容器中,setevn.sh是在path/ tomcat_home / bin /中创build的,具有以下内容。 export JAVA_OPTS=" -Xdebug -Xrunjdwp:transport=dt_socket,address=62911,server=y,suspend=n -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=19998 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.17.0.16" 我写了一个简单的java代码 JMXServiceURL serviceURL = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + "172.17.0.16"+ ":" + "19998" + "/jmxrmi"); JMXConnector connector = JMXConnectorFactory.connect(serviceURL, null); MBeanServerConnection mbsc = connector.getMBeanServerConnection(); 并可以通过JMX获取相关的值。 但是,我运行这个代码在我的桌面与docker主机的地址和19998端口,如 JMXServiceURL serviceURL […]

在Docker下运行应用程序时,无法远程build立JMX连接

我有在docker容器内运行的应用程序。 我已经初始化了jetty容器下的JMX过程。 这些所有进程都在docker容器下运行。 当我尝试使用JCONSOLE进行远程连接来连接我的JMX主机:端口,我无法连接。 我的物理主机: matrix01lx (这是docker集装箱正在运行)我的docker虚拟IP地址: 172.17.0.2 。 现在,当我想要连接使用JMX我能够连接,只有当我从物理主机docker容器正在运行的连接,即matrix01lx在我的情况。 我连接使用: service:jmx:rmi://host/jndi/rmi://matrix01lx:11041/smp.serverruntime 当通过JCONSOLE连接时,远程连接失败, java.rmi.ConnectException: Connection refused to host: **172.17.0.2**; nested exception is: java.net.ConnectException: Connection timed out: connect at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:129) at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source) at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2404) at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:308) at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:268) at com.sigma.jmxClient.Connect.main(Connect.java:53) Caused by: java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.connect0(Native […]