在了解一些JVM的基础之上,我们在给系统定位问题的时候呢,还需要特别好的工具来帮助我们进行分析和查找问题。JDk安装完成后,在${JAVA_HOME}/bin目录下,是java自带的一些监控工具。
1、jps:虚拟机进程状况工具
jps:显示当前系统的java进程情况
jps [options] [hostid]
选项 | 作用 |
-q | 只输出 LVMID,省略主类的名称 |
-m | 输出虚拟机启动时候传递给 main方法的参数 |
-l | 输出类的全名 |
-v | 输出虚拟机进程启动时 JVM参数 |
以下示例:
2、jstat:虚拟机统计信息
jstat:用于监视虚拟机各种运行状态信息,包括类加载、内存、垃圾收集器、JIT编译等运行数据
命令格式:
jstat [option vmid [interval[s|ms] [count]]
选项 | 作用 |
-class | 监视类加载、卸载数量、总空间及类加载所耗费的时间 |
-gc | 监视java堆状况,包括Eden区、2个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
-gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccapacity | 监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大和最小空间 |
jstat –gc 4988 100 2 每100毫秒查询一次进程4988垃圾收集状况,一共查询2次。
jstat –gcutil 4988
3、jinfo: Java配置信息工具
jinfo 实时查看和调整虚拟机各项参数
命令格式:
jinfo [option] pid
例如:
jinfo -flags pid 查看jvm参数
jinfo -sysprops pid查看java系统参数
4、jmap:java内存映像工具
JVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件。 jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永久代的详细信息,如当前使用率、当前使用的是哪种收集器等
5)jstack:Java堆栈跟踪工具
Jstack命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源(数据库连接、网络资源、设备资源)导致的长时间等待等都是导致线程长时间停顿的常见原因。
命令格式:
jstack[option] vmid
选项 | 作用 |
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 |
-l | 除堆栈外,显示关于锁的附加信息 |
-m | 如果调用到本地方法的话,可以显示c/c++的堆栈 |
6)VisualVM
界面化管理,提供很多插件,需要可以安装插件。