1. jps (java process status) : 查看正在运行的java进程
语法 : jps [options] [hostid]
无参数 :
-q : 仅仅显示线程的id
-l : 输出应用程序的全类名, 如果进程执行的是jar包, 则输出jar包的完整路径
-m : 输出虚拟机进程传递给主类main的参数
-v : 列出虚拟机进程启动时的jvm参数
2. jstat 查看jvm统计信息
语法 : jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
option :
- -class : 显示classLoader相关信息
- -gc : 显示与gc相关的信息, 包括eden区, 两个survivor区, 老年代,永久代等
- -gccapacity : 显示内容与-gc基本相同, 主要输出关注java堆各个区域使用到的最大,最小空间
- -gcutil : 显示内容与-gc基本相同, 主要关注已使用空间占总空间的百分比
- -gccause : 与-gcutil功能相同, 但是会额外输出导致最后一次或当前正在发生gc的原因
- -gcnew : 显示新生代gc情况
- -gcnewcapacity : 显示与-gcnew基本相同, 输出主要关注使用到的最大,最小空间
- -gcold : 显示老年代gc情况
- -gcoldcapacity : 显示内容与gcold基本相同, 输出主要关注使用到的最大,最小空间
- -gcpermcapacity : 显示永久代使用到的最大, 最小空间
interval : 用于指定输出统计数据的周期, 单位为毫秒, 即查询间隔
count : 用于指定查询的总次数
-t : 可以在输出信息上加一个timestamp, 显示程序运行的总时间
-h : 可以指定周期性输出时, 输出多少行数据后输出一个表头信息
全参数测试 :
① option 选择 class
loaded : 加载了多少类
bytes : 占用了多少字节
unloaded : 卸载了多少类
bytes : 占用了多少字节
② option 选择 gc
3. jinfo 实时查看和修改jvm配置参数
语法 : jinfo [option] pid
option 选项 :
- no option : 输出全部的参数和属性
- -flag name : 输出对应名称参数值
- -flag [+-]name : 开启或关闭对应名称的参数, 只有被标记为manageable的参数才可以被动态修改
- -flag name=value : 设置对应名称的参数
- -flags: 输出全部的参数
- -sysprops : 输出系统属性
4. jmap : 导出内存映像文件 & 内存使用情况
1. 手动方式生成dump文件
2. 自动生成dump文件, 需要配置两个参数, 当发生oom之前, 会创建一个dump文件
注意 : jmap生成dump文件, 该命令不会马上执行并生成, 而是必须到达安全点才可以, 这就造成dump文件可能有误差
-heap : 生成jvm空间使用情况文件 同 jstat -gc类似
-histo : 生成jvm中存活对象数量的文件
5. jhat jdk自带堆空间分析工具 (jdk9已移除)
接下来访问 : http://localhost:7000
6. jstack 打印jvm线程快照
语法 : jstack pid
线程状态 :
- block 阻塞
- TIMEOUT_BLOCK 运行时间较长, 导致阻塞