Here’s how you can quickly get java heap dump and stack dump on Amazon Linux with Java 8. Your mileage with these commands may vary.
First, find the process ID (pid) and user for the java process that you want heap/stack dumps of. I like running:
ps -aux | grep java
Note the user under which the Java process is running and switch to it. In my case, it was “webapp”.
# sudo su # su webapp
Now, run this for the heap dump:
jmap -dump:file=/home/webapp/heapdump.bin <pid>
This for stack trace:
jstack -l <pid> > /home/webapp/strace.log
Optional (to scp these files out): Copy these files over to your regular user’s home directory. For me, this was “ec2-user”. Exit to root user first.
# exit # cp /home/webapp/heapdump.bin /home/webapp/strace.log /home/ec2-user # chown ec2-user:ec2-user /home/ec2-user/heapdump.bin /home/ec2-user/strace.log
Now use your favorite scp tool to scp the files out.
[Extra Tip] Here’s how you’d get more information (such as HeapSize) about the specific JDK running on the instance:
#java -XX:+PrintFlagsFinal -version | grep HeapSize uintx ErgoHeapSizeLimit = 0 {product} uintx HeapSizePerGCThread = 87241520 {product} uintx InitialHeapSize := 132120576 {product} uintx LargePageHeapSizeThreshold = 134217728 {product} uintx MaxHeapSize := 2095054848 {product} openjdk version "1.8.0_91" OpenJDK Runtime Environment (build 1.8.0_91-b14) OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)