一、Java虚拟机管理常用命令
jps | 显示指定系统内所有的虚拟机进程 |
---|---|
jstat | 收集虚拟机各方面的运行数据 |
jinfo | 显示虚拟机配置信息 |
jmap | 虚拟机内存转储快照(dump文件) |
jhat | 用于分析dump文件,会建立一个HTTP/HTML服务器,可再浏览器查看 |
jstack | 显示虚拟机的线程快照· |
-
jps
jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名
jps [options] [hostid]
-
jstat
用于监控虚拟机各种运行状态信息的命令行工具,显示本地或远程虚拟机中的类转载、内存、垃圾收集、JIT编译等运行数据。
jstat [ option vmid [interval[s|ms] [count]]
VMID与LVMID:如果是本地虚拟机进程、VMID与LVMID是一致的
参数interval 和count 代表查询间隔和次数,如果没有这两个参数 默认只查询一次
jstat -gc 2764 250 20 表示每隔250毫秒查询一次进程2764的垃圾收集状态,一共查询20次
option分为三类:类转载,垃圾收集,运行编译状况
-class 监视类转载,卸载数量,总空间以及类装载所耗费的时间 -gc 监视Java堆状态,包括Eden、survivor、老年代、永久带等容量、已用时间,GC时间合计等 -
jinfo Java配置信息工具
实时查看和调整虚拟机各项参数。
-
jmap
Java内存映像工具,用于生成堆转出快照(dump文件)。可以查询finalize执行队列、Java堆和永久代的详细信息
jmap [option] vmid
-dump 生成dump堆存储快照 -finalizerinfo 显示F-Queue中等待Finalizer线程执行finalize方法的对象 -heap 显示Java堆的详细信息,如使用哪种回收器,参数配置,分代状况 -histo 显示堆中对象统计信息,包括类、实例数量、合计容量 -
jhat(一般不使用)
虚拟机堆转储快照分析工具,与jmap搭配使用,jhat内置了一个微型的HTTP/HTML服务器,生成dump文件的分析结果后,可以再浏览器查看。
-
jstack
用于生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每一条线程正在执行方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿可以通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情或者等待什么资源。
jstack [option] vmid
jstack -F 2681
-F 当正常输出的请求不被响应时,强制输出线程堆栈 -l 除堆栈外,显示关于锁的附加信息 -m 如果调用到本地方法,可以显示c/c++堆栈
二、VisualVM(多合一故障处理工具)
- 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)
- 监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)
- dump以及分析堆转储快照(jmap、jhat)
- 方法级的程序运行性能分析,找出被调用最多、运行时间最长的方法
- 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照。
具体参考JMX连接jstatd连接到服务器查看
jstatd需要配置 jstatd.all.policy配置
grant codebase "file:$JAVA_HOME/../lib/tools.jar" {
permission java.security.AllPermission;
};
jstatd -J-Djava.security.policy=jstatd.all.policy -p 1099 &