How to monitor java application memory usage in Docker
cadvisor, docker, jvm, memory, monitoring
Solution
To connect to a java process running in a docker container running in `boot2docker` with `visualvm` you can try the following:
Start your java process using the following options:
java -Dcom.sun.management.jmxremote.port=<port> \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.rmi.port=<port> \
-Djava.rmi.server.hostname=<boot2docker_ip> \
<Main>
You need to run your image with `--expose <port> -p <port>:<port>`.
Then "Add JMX Connection" in `visualvm` with `<boot2docker_ip>:<port>`.
It shouldn't be much different without `boot2docker`.
Problem
I run the java web application on tomcat in the Docker container. Is there any way to monitor the memory usage of the java application? I try to use `jconsole` with the process id of the docker, but it tells me `Invalidate process id` I also enable JMX in tomcat, but don't know how to bind to it. I can use `visualvm` from my local to bind the host machine, but can not find way to bind to the docker inner the host. Is there any good way to achieve this? Thanks