Docker中查看JVM的信息:
1. 列出docker容器:docker ps
2. 標准輸入和關聯終端:docker exec -it 容器ID bash
3. 查找出java進程: ps – ef | grep java
4. 統計gc信息統計: jstat –gcutil 466 3000 每三秒打印一次
如果CPU飆太高,可以參考《java調優1:找出Java進程中大量消耗CPU》
示例1--jstack查看線程堆棧信息
查看正在運行的容器id
docker ps
這里我運行的是一個spring boot應用,docker容器id如下
使用docker exec進入Docker容器,命令如下
docker exec -it be6203473016 /bin/sh
be6203473016 是CONTAINER ID
運行jps,已經能看到剛才啟動的spring boot應用了
這時就可以使用jstat,jmap等根據進程id查看程序狀態了,以下是我運行jstack查看的堆棧信息
示例2--jmap導出內存堆棧信息
jmap -dump:format=b,file=/logs/test.bin 9
(上面的logs目錄需要你自己在docker容器里找個已存在的目錄啊)
導出jmap dump的文件,進一步分析,copy docker中的文件到宿主機的當前目錄,命令如下:
docker cp be6203473016:/logs/test.bin .
test.bin 是我剛才用jmap -dump生成的文件
be6203473016是docker 容器id
在用sz從宿主機下載到工作電腦,命令如下:
sz test.bin
示例3--jstat統計gc回收信息
jstat –gcutil 9 3000
每三秒打印一次