JVM:虚拟机性能监控工具

jps 查看进程状况

-q:仅输出VM标识符,不包括classname,jar name,arguments in main method

-m:输出main method的参数

-l:输出完全的包名,应用主类名,jar的完全路径名

-v:输出jvm参数 -V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件 -Joption:传递参数到vm,例如:-J-Xms512m

jstat 虚拟机统计信息监控

jstat -

  • Options — 选项,我们一般使用 -gcutil 查看gc情况
  • t,h--t是显示Timestamp时间间隔列,h是显示标题,-h3每三行显示标题
  • vmid —VM的进程号,即当前运行的java进程号
  • interval– 间隔时间,单位为秒或者毫秒
  • count —打印次数,如果缺省则打印无数次

Option选项:

  • -class 监视类的装载、卸载数量以及类的装载总空间和耗费时间等
  • -gc 监视Java堆,包含eden、2个survivor区、old区和永久带区域的容量、已用空间、GC时间合计等信息
  • -gccapcity 监视内容与-gc相同,但输出主要关注Java区域用到的最大和最小空间
  • -gcutil 监视内容与-gc相同,但输出主要关注已使用空间占总空间的百分比
  • -gccause 与-gcutil输出信息相同,额外输出导致上次GC产生的原因
  • -gcnew 监控新生代的GC情况
  • -gcnewcapacity 与-gcnew监控信息相同,输出主要关注使用到的最大和最小空间
  • -gcold 监控老生代的GC情况
  • -gcoldcapacity 与-gcold监控信息相同,输出主要关注使用到的最大和最小空间
  • -gcpermcapacity 输出永久带用到的最大和最小空间
  • -compiler 输出JIT编译器编译过的方法、耗时信息 -printcompilation 输出已经被JIT编译的方法

示例:jstat -gcutil 进程id 输出时间间隔

S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
GCT 是YGCT 和FGCT的时间总和。

查看类加载信息:jstat -class pid

Loaded 装载的类的数量 
Bytes 装载类所占用的字节数 
Unloaded 卸载类的数量 
Bytes 卸载类的字节数 
Time 装载和卸载类所花费的时间

jinfo

jinfo: 实时地查看和调整虚拟机各项参数,使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数 

jmap

用于生成堆转储快照.

如果不使用 jmap 命令,要想获取 Java 堆转储,可以使用 “-XX:+HeapDumpOnOutOfMemoryError” 参数,可以让虚拟机在 OOM 异常出现之后自动生成 dump 文件,Linux 命令下可以通过 kill -3 发送进程退出信号也能拿到 dump 文件。

jhat

jhat是用来分析dump文件的一个微型的HTTP/HTML服务器,它能将生成的dump文件生成在线的HTML文件,让我们可以通过浏览器进行查阅,然而实际中我们很少使用这个工具,因为一般服务器上设置的堆、栈内存都比较大,生成的dump也比较大,直接用jhat容易造成内存溢出,而是我们大部分会将对应的文件拷贝下来,通过其他可视化的工具进行分析

jstack

jstack用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。通过jstack我们就可以知道哪些进程在后台做些什么?在等待什么资源等!其运行格式如下:

jstack [option] vmid

如何利用以上工具:进行线上问题排查:

一、使用jps查看线程ID

二、使用jstat -gc 3331 250 20 查看gc情况,一般比较关注PERM区的情况,查看GC的增长情况。

三、使用jstat -gccause:额外输出上次GC原因

四、使用jmap -dump:format=b,file=heapDump 3331生成堆转储文件

五、使用jhat或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。

六、结合代码解决内存溢出或泄露问题。

 

你可能感兴趣的:(JVM)