JVM调优

java调优命令:

1、jps - 虚拟机进程状况工具

JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。

$ jps [options] [hostid]

$ jps -l -m

2、jstat - 虚拟机统计信息监视工具

jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

$ jstat [option] LVMID [interval] [count]
  • [option] : 操作参数
  • LVMID : 本地虚拟机进程ID
  • [interval] : 连续输出的时间间隔
  • [count] : 连续输出的次数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ARIqfOT-1624537400593)(d:\我的文档\JD\office_dongdong\dengkun11\Temp\JdOnline20210618155746.png)]

#-class 监视类装载、卸载数量、总空间以及耗费的时间
$ jstat -class 13536

Loaded  Bytes  Unloaded  Bytes     Time
  3607  6357.5       29    41.7       2.77
  • Loaded : 加载class的数量
  • Bytes : class字节大小
  • Unloaded : 未加载class的数量
  • Bytes : 未加载class的字节大小
  • Time : 加载时间
#-compiler 输出JIT编译过的方法数量耗时等
$ jstat -compiler 1262
Compiled Failed Invalid   Time   FailedType FailedMethod
    2157      0       0     1.88          0
  • Compiled : 编译数量
  • Failed : 编译失败数量
  • Invalid : 无效数量
  • Time : 编译耗时
  • FailedType : 失败类型
  • FailedMethod : 失败方法的全限定名
#-gc 垃圾回收堆的行为统计,常用命令   C即Capacity 总容量,U即Used 已使用的容量
$ jstat -gc 1262
#-gccapacity 同-gc,不过还会输出Java堆各区域使用到的最大、最小空间
$ jstat -gccapacity 1262
#-gcutil 同-gc,不过输出的是已使用空间占总空间的百分比
$ jstat -gcutil 28920
#-gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
$ jstat -gccause 28920
#-gcnew 统计新生代的行为
$ jstat -gcnew 28920
#-gcnewcapacity 新生代与其相应的内存空间的统计
$ jstat -gcnewcapacity 28920
#-printcompilation hotspot编译方法统计
$ jstat -printcompilation 28920
#每250毫秒查询一次进程31336的垃圾收集情况,一个查询20次
$ jstat -gc 31336 250 10

3、jinfo - Java配置信息工具

jinfo的作用是实时地查看和调整虚拟机各项参数。

# 查看进程31336所在虚拟机的配置信息
$ jinfo -flags 31336

4、jmap - Java内存映射工具

1、jmap(Memory Map for Java)命令用于生成堆转储快照(dump文件)。
2、如果不使用这个命令,还阔以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候·自动生成dump文件。
3、jmap的作用不仅仅是为了获取dump文件,它还可以查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用到是哪个收集器等。

# 打印等待回收对象的消息
$ jmap -finalizerinfo 31336

打印堆的概要信息,GC使用的算法,heap的配置及wise heap的使用情况

# 打印堆的概要信息 
$ jmap -heap 31336

Attaching to process ID 31336, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.152-b16

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 734003200 (700.0MB)
   NewSize                  = 42991616 (41.0MB)
   MaxNewSize               = 244318208 (233.0MB)
   OldSize                  = 87031808 (83.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 32505856 (31.0MB)
   used     = 10579888 (10.089767456054688MB)
   free     = 21925968 (20.910232543945312MB)
   32.54763695501512% used
From Space:
   capacity = 5242880 (5.0MB)
   used     = 3924256 (3.742462158203125MB)
   free     = 1318624 (1.257537841796875MB)
   74.8492431640625% used
To Space:
   capacity = 5242880 (5.0MB)
   used     = 0 (0.0MB)
   free     = 5242880 (5.0MB)
   0.0% used
PS Old Generation
   capacity = 87031808 (83.0MB)
   used     = 155680 (0.148468017578125MB)
   free     = 86876128 (82.85153198242188MB)
   0.1788771296121988% used

5390 interned Strings occupying 457600 bytes.

** 打印堆的对象统计,包括对象数、内存大小等等(因为在dump:live前会进行full gc,如果带上live则只统计活对象,因此不加live的堆大小要大于加live堆的大小 ) **

# 打印堆的对象统计
$ jmap -histo:live 31336 | more


 num     #instances         #bytes  class name
----------------------------------------------
   1:         11088        1059416  [C
   2:           633         423224  [B
   3:          3525         393032  java.lang.Class
   4:          2720         315216  [Ljava.lang.Object;
   5:         10865         260760  java.lang.String
   6:          6611         211552  java.util.concurrent.ConcurrentHashMap$Node
   7:          6117          97872  java.lang.Object
   ...

说明:
B byte
C char
D double
F float
I int
J long
Z boolean
[ 数组,如[I表示int[]
[L+类名 其他对象

5、 jhat - 虚拟机堆转储快照分析工具

jhat(JVM Heap Analysis Tool)命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。在此要注意,一般不会直接在服务器上进行分析,因为jhat是一个耗时并且耗费硬件资源的过程,一般把服务器生成的dump文件复制到本地或其他机器上进行分析。

6、jstack - Java堆栈跟踪工具

jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。

线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

$ jstack -l 31336


2021-06-24 20:13:52
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.152-b16 mixed mode):

"DestroyJavaVM" #14 prio=5 os_prio=0 tid=0x00000000031a5800 nid=0x8638 waiting on condition [0x0000000000000000]
  java.lang.Thread.State: RUNNABLE

  Locked ownable synchronizers:
       - None

"JPS event loop" #11 prio=5 os_prio=0 tid=0x00000000185b1000 nid=0x8180 runnable [0x000000001988e000]
  java.lang.Thread.State: RUNNABLE
       at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
       at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
       at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
       at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
       at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
       - locked <0x00000000d445aa10> (a io.netty.channel.nio.SelectedSelectionKeySet)
       - locked <0x00000000d445aa28> (a java.util.Collections$UnmodifiableSet)
       - locked <0x00000000d445a990> (a sun.nio.ch.WindowsSelectorImpl)
       at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
       at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
       at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:68)
       at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:803)
       at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457)
       at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
       at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
       at java.lang.Thread.run(Thread.java:748)

  Locked ownable synchronizers:
       - None

"Service Thread" #10 daemon prio=9 os_prio=0 tid=0x0000000017200800 nid=0x9bc runnable [0x0000000000000000]
  java.lang.Thread.State: RUNNABLE

  Locked ownable synchronizers:
       - None

"C1 CompilerThread3" #9 daemon prio=9 os_prio=2 tid=0x0000000017166000 nid=0x25e8 waiting on condition [0x0000000000000000]
  java.lang.Thread.State: RUNNABLE

  Locked ownable synchronizers:
       - None
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值