最佳答案
实际上,我想要一个可以用于 JEE 容器的解决方案,特别是用于 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;
}
}
}
}
文件夹
FROM java:8
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
大楼: docker build -t hello-world-daemon .
运行: docker run -it --rm --name hwd hello-world-daemon
问题:
CMD
命令行中添加哪些 JVM 参数?我不会在这里展示我失败的尝试,这样正确的答案就不会有偏见。这应该是一个非常普遍的问题,但是我找不到一个可行的解决方案。
更新,成功的解决方案
这个文件管用
FROM java:8
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", \
"-Dcom.sun.management.jmxremote", \
"-Dcom.sun.management.jmxremote.port=9010", \
"-Dcom.sun.management.jmxremote.local.only=false", \
"-Dcom.sun.management.jmxremote.authenticate=false", \
"-Dcom.sun.management.jmxremote.ssl=false", "Main"]
EXPOSE 9010
结合使用 docker run 命令
docker run -it --rm --name hwd -p 9010:9010 hello-world-daemon
VisualVM
通过右键单击 Local-> Add JMX Connection 本地-> 添加 JMX 连接进行连接,然后进入 localhost:9010
,或者通过添加远程主机进行连接。
JConsole
通过选择 远程处理与 localhost:9010
连接。
当将连接定义为远程连接时,可以使用 ifconfig
列出的任何接口。例如,带有地址 172.17.0.1
的 docker0
接口可以工作。集装箱的地址 172.17.0.2
也可以工作。