java jvm 基本命令
docker 旗下查看Java jvm运行信息
1、docker ps 查看服务器上有哪些docker容器
2、docker exec -it 容器ID bash 进入容器ID这个容器中
3、使用 Java jvm 命令
du -sh ./first 查看某文件的大小
Java dump
Java虚拟机的运行快照,讲Java虚拟机运行时的状态和信息保存到文件,主要用于多线程、内存泄漏
线程dump : 包含所有线程的运行状态,纯文本格式
堆dump : 包含线程dump,并包含有堆对象的状态,二进制格式
-XX:+HeapDumpOnOutOfMemoryError 配置后可在虚拟机发生内存不足错误时,自动生成堆dump
1、jps :查看当前有哪些Java进程处于运行状态,eg jps -v 查看进程的jvm蚕食情况
2、jstack :jstack 用于生成Java虚拟机当前时刻的线程快照,用来分析线程问题。
线程快照是当前jvm内每一条线程正在执行的方法堆栈的集合、快照目的定位线程出现长时间停顿的原因,比如线程
死锁,死循环等。
其中线程的集中状态:new (未启动) runnable (执行) blocked (受阻塞并等待监视器锁) wating (无线等待) timed_wating (有时限的等待)
terminated (已退出)
3、jmap
Java内存常见错误
outOfMemoryError 老年代内存不足
outOfMemoryError:PermGen Space 永久代内存不足
outOfMemoryError:Gc overhead limit exceed 垃圾回收时间占用系统运行时间的98%或以上
jmap -heap pid 查看进程ID的堆配置及使用情况
jmap -histo pid 查看进程ID堆内存中的对象数量及大小
jmap -dump:format=b,file=文件名称 pid 将堆内存使用的详细情况输出到文件中
4、jstat 监控虚拟机运行状态 常用-gcutil gc
eg: jstat -gcutil pid 多久时间毫秒监控一次 打印多少次
jstat -gcutil pid 1000 100 监控虚拟机内存gc情况 每间隔1秒 打印100次
5、jhat 用来分析Java 堆dump信息
使用 jhat dump文件 会生成一个web服务端口7000 主要查看里面的两项 平台外的所有对象及以树状图形式展示堆情况
6、jinfo
jinfo pid 查看进程pid 运行环境的配置信息
7、javap 对代码反编译,也可以查看编译器生成的字节码
8、jvm 命令总结:
jps 显示当前用户的Java运行的进程
jinfo 实时查看jvm的状态信息
jstat 监控jvm堆运行状态
常用有 jstat -gccause 额外输出上次GC原因
jstat -class 类装载、总空间及消耗空间
jstat -gcutil pid 1000 100
jmap 生成堆快照dump
常用有:jmap -heap pid 查看堆使用情况
jmap -histo pid 堆内存对象数量及大小
jmap -dump:format=b,file=dump文件名称 pid
jhat 解析、分析dump文件信息
jstack 生成当前pid中线程的快照
常用有:jstack pid 查看线程情况
常见问题定位
1、频繁GC 或者内存溢出
使用jps查看进程ID,监控堆gc情况,上次gc原因,生成堆转存文件dump 使用jhat分析 结合代码
2、死锁问题
使用jps查看线程ID 分析线程dump