前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM性能调优-命令行工具jps/jstat/jinfo/jmap/jhat/jstack/jcmd

JVM性能调优-命令行工具jps/jstat/jinfo/jmap/jhat/jstack/jcmd

作者头像
JavaEdge
发布2021-02-22 14:16:17
9220
发布2021-02-22 14:16:17
举报
文章被收录于专栏:JavaEdgeJavaEdge

1.1 jps

类似Linux的ps,但jps只列出Java的进程。可方便查看Java进程的启动类、传入参数和JVM参数。直接运行,不加参数,列出Java程序的进程ID及Main函数名称。

jps命令本质也是Java程序
jps命令本质也是Java程序
  • -m 输出传递给Java进程的参数
  • -l 输出主函数的完整路径
  • -q 只输出进程ID
  • -v 显示传递给jvm的参数

1.2 jstat

观察Java应用程序运行时信息的工具,详细查看堆使用情况以及GC情况

  • jstat -options

1.2.1 jstat -class pid

显示加载class的数量及所占空间等信息

  • -compiler -t:显示JIT编译的信息

1.2.2 -gc pid

显示gc信息,查看gc的次数及时间

代码语言:javascript
复制
➜  ~ jstat -gc 87552
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT
25088.0 20992.0  0.0   20992.0 500224.0 56227.0   363008.0   35238.1   76672.0 72902.5 10368.0 9590.5      9    0.078   3      0.162   -          -    0.239

1.2.3 -gccapacity

比-gc多了各个代的最大值和最小值

jstat -gccapacity 3661
jstat -gccapacity 3661

-gccause

最近一次GC统计和原因

  • LGCC:上次GC原因
  • GCC:当前GC原因
 -gcnew pid:new对象的信息。
-gcnew pid:new对象的信息。

jstat -gcnewcapacity pid:new对象的信息及其占用量

-gcold 显示老年代和永久代信息
-gcold 显示老年代和永久代信息
-gcoldcapacity展现老年代的容量信息
-gcoldcapacity展现老年代的容量信息

-gcutil

相比于-gc 参数,只显示使用率而非使用量了。 显示GC回收相关信息

-printcompilation

当前VM执行的信息

jstat -printcompilation 3661
jstat -printcompilation 3661

还可以同时加两个数

  • 输出进程4798的ClassLoader信息,每1秒统计一次,共输出2次

1.3 jinfo

jinfo 查看正在运行的Java程序的扩展参数,甚至在运行时修改部分参数

查看运行时参数

代码语言:javascript
复制
jinfo -flag MaxTenuringThreshold 31518
-XX:MaxTenuringThreshold=15

在运行时修改参数值

代码语言:javascript
复制
> jinfo -flag PrintGCDetails 31518
-XX:-PrintGCDetails

> jinfo -flag +PrintGCDetails 31518

> jinfo -flag PrintGCDetails 31518

-XX:+PrintGCDetails

1.4 jmap

生成堆快照和对象的统计信息。

-histo 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.

  • -dump:[live,]format=b,file= 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.

获得堆快照文件之后,我们可以使用多种工具对文件进行分析,例如jhat,visual vm等。

1.5 jhat

分析Java应用程序的堆快照文件,以前面生成的为例

jhat heap.hprof
jhat heap.hprof

jhat在分析完成之后,使用HTTP服务器展示其分析结果,在浏览器中访问http://127.0.0.1:7000/即可得到分析结果。

1.6 jstack

导出Java应用程序的线程堆栈 jstack -l

jstack可以检测死锁,下例通过一个简单例子演示jstack检测死锁的功能。java代码如下:

使用jps命令查看进程号为11468,然后使用jstack -l 11468 > a.txt命令把堆栈信息打印到文件中
使用jps命令查看进程号为11468,然后使用jstack -l 11468 > a.txt命令把堆栈信息打印到文件中

从该输出信息可知:

  • 在输出的最后一段,有明确的"Found one Java-level deadlock"输出,所以通过jstack可检测死锁
  • 输出中包含了所有线程,除了我们的north,sorth线程外,还有"Attach Listener", “C2 CompilerThread0”, "C2 CompilerThread1"等
  • 每个线程下面都会输出当前状态,以及这个线程当前持有锁以及等待锁,当持有与等待造成循环等待时,将导致死锁

jcmd

执行 JVM 相关分析命令(整合命令)。

代码语言:javascript
复制
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
help

VM.version

jrunscript/jjs

执行 js 命令

jconsole

jvisualVM

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 jps
  • 1.2 jstat
    • 1.2.1 jstat -class pid
      • 1.2.2 -gc pid
        • 1.2.3 -gccapacity
          • -gccause
            • jstat -gcnewcapacity pid:new对象的信息及其占用量
              • -gcutil
                • -printcompilation
                  • 还可以同时加两个数
                  • 1.3 jinfo
                    • 查看运行时参数
                      • 在运行时修改参数值
                      • 1.4 jmap
                      • 1.5 jhat
                      • 1.6 jstack
                      • jcmd
                        • VM.version
                        • jrunscript/jjs
                        • jconsole
                        • jvisualVM
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档