How to monitor java application memory usage in Docker

Browny Lin picture Browny Lin · Apr 16, 2014 · Viewed 9.4k times · Source

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

Answer

Pierre Mage picture Pierre Mage · Sep 11, 2015

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.