使用docker查看jvm状态,在docker中使用jmap,jstat
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
每三秒打印一次