Using Jattach to get dumps from a JVM running inside Docker with JRE base image

Using a JDK as the runtime image is simply a waste of resources, but it makes it a bit more difficult to get memory- and thread dumps out of the JVM at runtime.

Jattach to the rescue. Let’s imagine a situation where we have an image running your Java application using the JRE and you want to get a thread dump out of it.

First, we want to fetch the latest release of the Jattach binary.

wget https://github.com/apangin/jattach/releases/download/v1.5/jattach

Now that we have the binary, we need to make it executable.

chmod +x jattach

Not that we have an executable binary, we need the PID if the application. If you are running Java on the host, you can figure it out using ps -aux.

If you are running it in Docker, you’ll first need to figure out the image ID or -name. This can be done with docker ps. Next, use the image ID or -name to get the processes which are running in the container using docker top <image id or -name>.

That’s it, we’ve got all we need. To get a thread dump from the Java process, run the following command.

./jattach <pid> threaddump

There’s much more Jattach is able to do, check the readme page!

 

Miro Metsänheimo

A software developer from Finland born in -92. I'm passionate about computers and technology. Feel free to message me about anything!

 

Leave a Reply