目录

  • jps--虚拟机进程查看工具
  • jstat--虚拟机统计监视工具
  • jinfo--虚拟机配置信息工具
  • jmap--虚拟机内存映象工具
  • jhat--虚拟机HeapDump分析工具
  • jstack--java堆栈跟踪工具
  • Jconsole和VisualVM
  • visualVM分析OutOfMemoryError异常

jdk本身为我们定位java相关的生产问题提供了内置的工具,这些内置的工具用好了足以应对常见的大多数生产问题,这篇就将jdk自带命令行和可视化工具做一下汇总介绍。

jps–虚拟机进程查看工具

类似于ps命令,输出虚拟机进程信息,第一列为LVMID跟pid是一致的。



java 运维基础监控 java运维工具_jvm

jstat–虚拟机统计监视工具

虚拟机统计信息监视工具,监视虚拟机各种运行状态比如GC的统计信息。

比如:每250毫秒查询一次进程垃圾收集状况,一共查询20次。

#格式:jstat [option]  lvmid  interval  count
$jstat -gc 17936  250 20



java 运维基础监控 java运维工具_java 运维基础监控_02

解释:

  • 「C:」 容量
  • 「U:」 使用量
  • 「E:」 eden区
  • 「O:」 老年代
  • 「M:」 元数据区
  • 「YGC:」 YoungGC次数
  • 「YGCT:」 YoungGC花费总时间
  • 「FGC:」 FullGC次数
  • 「FGCT:」 FullGC花费总时间

jinfo–虚拟机配置信息工具

实时查看和调整虚拟机各项参数

比如:查看进程17936的System.properties()信息

jinfo -sysprops  17936



java 运维基础监控 java运维工具_java 运维基础监控_03

查看老年代触发gc百分比

$jinfo -flag CMSInitiatingOccupancyFraction 17936



java 运维基础监控 java运维工具_linux_04

jmap–虚拟机内存映象工具

jmap命令用于生成heapdump文件,也就是“堆转储快照”。

其他方式如:-XX:HeapDumpOnOutOfMemoryError或者kill -3 pid

# 给进程为17936生成dump二进制文件,名称为jeffdump.bin
   $jmap -dump:format=b,file=jeffdump.bin 17936
# 打印
 C:\Users\Administrator>jmap -dump:format=b,file=jeffdump.bin 17936
 Dumping heap to C:\Users\Administrator\jeffdump.bin ...
 Heap dump file created

jhat–虚拟机HeapDump分析工具

jhat内置了一个微型的http/html服务器,生成dump文件的分析结果后,可以在浏览器中查看。

一般不会再服务器上直接用jhat分析dump,毕竟耗时耗资源,而且jhat分析功能简陋,一般可以用VisualVM或者Eclipse Memory Analyzer。

$jhat jeffdump.bin
C:\Users\Administrator>jhat jeffdump.bin
Reading from jeffdump.bin...
Dump file created Wed Apr 29 17:30:48 CST 2020
Snapshot read, resolving...
Resolving 1831310 objects...
Chasing references, expect 366 dots.............
................................................
................................................
................................................
.....................................
Eliminating duplicate references................
................................................
................................................
................................................
..................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

打开浏览器:http://localhost:7000/



java 运维基础监控 java运维工具_java_05

分析内存泄露问题主要使用到Heap Histogram,可以找到内存中总容量最大的对象



java 运维基础监控 java运维工具_jvm_06

jstack–java堆栈跟踪工具

生成虚拟机当前时刻的线程快照,即threaddump或者javacore文件。也就是当前虚拟机每一条线程正在执行的方法堆栈集合,可以用来定位线程长时间停顿的原因,比如线程间死锁、死循环、请求外部资源导致的长时间等待。

$jstack -l 17936

Jconsole和VisualVM

  • jconsole和visualVM 是jdk提供的两个可视化监控工具。VisualVm是jdk发布的功能最强大的运行监视和故障处理工具。比专业收费的Jprofiler、youkit都不逊色多少。
  • VisualGC: 非jdk自带的工具,IDEA也有插件可以安装。
  • jmc:BEA公司JDK带的工具。需要装oracle的jdk才有。生产环境不建议使用,太重可能干扰线上服务。

visualVM分析OutOfMemoryError异常

  • 对于CMS收集器来说,如果超过98%的时间都在GC,而只有不足2%的内存恢复,则会抛出OOM:GC overhead limit exceeded。不过可以设置-XX:-UseGCOverheadLimit关闭这个异常的抛出。不过仍然可能会抛出OOM:Java Heap sapce异常!或者OOM:unable to creare new native thread.
  • 使用jdk自带的工具java VisualVM来分析
-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError

生成的java_pid9516.hprof文件,也可以使用Eclipse Memory Analyzer打开。



java 运维基础监控 java运维工具_开发语言_07

作者:jeff.sheng