DockerでJavaアプリケーションを動かしたとき、メモリリークしてアプリが落ちる場合があります。
そのときにjavaが使っていたヒープをダンプして、解析できるようにします。
DockerfileでJAVA_OPTSにヒープダンプのオプションを設定
ENV JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/dump.hprof"
Docker cpでヒープダンプを取得
docker ps -aq | xargs -I{} docker cp {}:/tmp/dump.hprof /tmp/{}_dump.hprof
ヒープダンプを解析
解析にはMATかjhatを使用する
memory analyzer (MAT)
jhat