jvm性能调优工具
1、jstat 命令
jstat: 查看类装载,内存,垃圾收集,gc相关信息
命令参数
# jstat -option -t #option:参数选项,-t:显示系统的时间
# jstat -option -h #指定输出多少行后,输出一次表头
# jstat -option vmid #进程的pid
# jstat -option interval #间隔时间,单位:秒
# jstat -option count #统计的次数
# jstat -class #显示加载class的数量,及所占空间等信息
# jstat -compiler #显示JIT编译器编译过的方法、耗时等相关信息
# jstat -gc #显示堆状况,包括eden区、survivor区(s0,s1)、老年代、永久代等
# jstat -gccapacity #显示各个代的容量以及使用情况
# jstat -gcmetacapacity #显示metaspace的大小
# jstat -gcnew #显示新生代信息
# jstat -gcnewcapacity #显示新生代大小和使用情况
# jstat -gcold #显示老年代和永久代的信息
# jstat -gcoldcapacity #显示老年代的大小
# jstat -gcutil #显示垃圾收集信息的百分比
# jstat -gccause #显示垃圾回收的相关信息,并显示最后一次和当前gc原因
# jstat -gcpermcapacity #显示永久代大小和使用情况
# jstat -printcompilation #输出JIT编译的方法信息 1、类统计
# jstat -class 26572
Loaded Bytes Unloaded Bytes Time
18828 38629.4 176 278.5 35.08
Loaded #已装载类的数量
Bytes #装载类所占用空间大小
Unloaded #已卸载类的数量
Bytes #卸载类所占用空间大小
Time #装载和卸载类所花费的时间 2、编译统计
# jstat -compiler 26572
Compiled Failed Invalid Time FailedType FailedMethod
4420 0 0 68.03 1 com/mysql/jdbc/AbandonedConnectionCleanupThread run
Compiled #编译任务执行数量
Failed #编译任务执行失败数量
Invalid #编译任务执行失效数量
Time #编译任务消耗时间
FailedType #最后一个编译失败任务的类型
FailedMethod #最后一个编译失败任务的类及方法 3、垃圾回收统计
# jstat -gc 26572
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
30208 23040 0.0 22706 691200 250577 1499136 618127 262144 115183 4734 92 2 2.9 95.8
S0C #年轻代s0(survivor)的容量,单位:字节
S1C #年轻代s1的容量
S0U #年轻代s0,已使用的空间,单位:字节
S1U #年轻代s1,已使用的空间
EC #年轻代e区(Eden)的容量,单位:字节
EU #年轻代e区,已使用的空间,单位:字节
OC #老年代的容量,单位:字节
OU #老年代,已使用的空间,单位:字节
MC #方法区(metaspace)的容量,单位:字节
MU #方法区,已使用空间,单位:字节
CCSC #压缩类空间大小
CCSU #压缩类空间使用大小
YGC #年轻代gc次数
YGCT #年轻代垃圾回收消耗时间,单位秒
FGC #老年代gc次数
FGCT #老年代垃圾回收消耗时间,单位秒
GCT #gc消耗总时间 4、堆内存统计
# jstat -gccapacity 26572
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
71958 71958 71958 30208 29184 69076 19136 19136 19136 19136 26210 52288 26210 26210 4735 2
NGCMN #年轻代初始化大小,单位:字节
NGCMX #年轻代最大容量,单位:字节
NGC #年轻代当前容量,单位:字节
S0C #年轻代s0的容量,单位:字节
S1C #年轻代s1的容量,单位:字节
EC #年轻代e区的容量,单位:字节
OGCMN #老年代初始化大小,单位:字节
OGCMX #老年代最大容量,单位:字节
OGC #老年代当前容量,单位:字节
OC #老年代当前容量,单位:字节
MCMN #方法区初始化大小,单位:字节
MCMX #方法区最大容量,单位:字节
MC #方法区当前容量,单位:字节
CCSMN #最小压缩类空间大小
CCSMX #最大压缩类空间大小
CCSC #当前压缩类空间大小
YGC #年轻代gc次数
FGC #老年代gc次数 5、元数据空间统计
# jstat -gcmetacapacity 26572
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1173504 139980 0.0 1048576 15104 3577 5 2.36 58.81
MCMN #最小元数据容量
MCMX #最大元数据容量
MC #当前元数据空间大小
CCSMN #最小压缩类空间大小
CCSMX #最大压缩类空间大小
CCSC #当前压缩类空间大小
YGC #年轻代gc次数
FGC #老年代gc次数
FGCT #老年代gc消耗的时间,单位:秒
GCT #gc的总时间,单位:秒 6、新生代垃圾回收统计
# jstat -gcnew 26572
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
23040 24064 0.0 1212 15 15 23040 70016 29782 3585 56.693
S0C #年轻代s0的容量,单位:字节
S1C #年轻代s1的容量,单位:字节
S0U #年轻代s0,已使用空间,单位:字节
S1U #年轻代s1,已使用空间,单位:字节
TT #对象在年轻代存活的次数
MTT #对象在年轻代存活的最大次数
DSS #期望的s区大小
EC #年轻代e区的容量,单位:字节
EU #年轻代e区,已使用空间,单位:字节
YGC #年轻代gc次数
YGCT #年轻代gc消耗的时间,单位:秒 7、新生代内存统计
# jstat -gcnewcapacity 26572
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
79568 79568 79568 29856 16384 29856 17408 72522 70728 3591 5
NGCMN #年轻代初始化的大小,单位:字节
NGCMX #年轻代最大容量,单位:字节
NGC #年轻代当前容量,单位:字节
S0CMX #年轻代s0最大容量,单位:字节
S0C #年轻代s0当前的容量,单位:字节
S1CMX #年轻代s1最大容量,单位:字节
S1C #年轻代s1当前的容量,单位:字节
ECMX #年轻代e区最大容量,单位:字节
EC #年轻代e区当前的容量,单位:字节
YGC #年轻代gc次数
FGC #老年代gc次数 8、老年代垃圾回收统计
# jstat -gcold 26572
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
17236 12923 1510 1303 11913 10376 3598 5 2.316 59.235
MC #方法区的容量,单位:字节
MU #方法区,已使用空间,单位:字节
CCSC #压缩类空间大小
CCSU #压缩类空间使用大小
OC #老年代的容量,单位:字节
OU #老年代,已使用空间,单位:字节
YGC #年轻代gc次数
FGC #老年代gc次数
FGCT #老年代gc消耗的时间
GCT #gc的总时间,单位:秒 9、老年代内存统计
# jstat -gcoldcapacity 26572
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
1499136.0 1499136.0 1499136.0 1499136.0 3603 5 2.316 59.322
OGCMN #老年代初始化大小,单位:字节
OGCMX #老年代最大容量,单位:字节
OGC #老年代当前的容量,单位:字节
OC #老年代当前的容量,单位:字节
YGC #年轻代gc次数
FGC #老年代gc次数
FGCT #老年代gc消耗的时间
GCT #gc的总时间,单位:秒 10、持久代空间统计
# jstat -gcpermcapacity 26572
PGCMN PGCMX PGC PC YGC FGC FGCT GCT
26214 52428 26214 26214 4742 2 2.902 96.146
PGCMN #持久代初始化大小
PGCMX #持久代最大容量
PGC #持久代当前的大小
PC #持久代当前的大小
YGC #年轻代gc的次数
FGC #老年代gc的次数
FGCT #老年代gc消耗的时间
GCT #gc的总时间,单位:秒 11、垃圾回收统计
# jstat -gcutil 26572
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 4.92 83.77 89.38 92.15 86.32 3607 57.09 5 2.31 59.41
S0 #年轻代s0,当前使用的百分比
S1 #年轻代s1,当前使用的百分比
E #年轻代e区,当前使用的百分比
O #老年代,当前使用的百分比
P #持久代,当前使用的百分比
M #方法区,当前使用的百分比
CCS #压缩类,当前使用的百分比
YGC #年轻代gc次数
YGCT #年轻代gc消耗的时间
FGC #老年代gc次数
FGCT #老年代gc消耗的时间
GCT #gc的总时间,单位:秒 12、垃圾回收统计及原因(和gcutil显示一样,同时最后显示原因)
# jstat -gccause 26572
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 4.92 83.77 89.38 92.15 86.32 3607 57.09 5 2.31 59.41 Allocation Failure No GC
LGCC #最后一次GC原因
GCC #当前GC原因(No GC: 没有执行GC) 13、JVM编译方法统计
# jstat -printcompilation 26572
Compiled Size Type Method
4420 169 1 java/util/Timer purge
Compiled #编译方法的数量
Size #编译方法的字节码的大小
Type #编译类型
Method #类名和方法名(格式由-XX:+PrintComplation参数决定)
2、Jmap 命令
Jmap: 列出java进程(pid),内存的所有对象的情况
命令参数
# jmap -dump #生成Java堆转储快照
# jmap -finalizerinfo #显示正等候回收的对象的信息
# jmap -heap #显示Java堆详细信息
# jmap -histo #显示堆中对象的统计信息
# jmap -permstat #显示持久代对象信息
# jmap -clstats #显示类加载器信息
# jmap -F #当没有响应时,强制模式
# jmap -J #传递参数给jmap启动的jvm 1、查看进程的内存映像信息
# jmap 26572
0x00000036bee00000 157K /lib64/ld-2.12.so
0x00000036bf200000 22K /lib64/libdl-2.12.so
0x00000036bf600000 1885K /lib64/libc-2.12.so
0x00000036bfa00000 143K /lib64/libpthread-2.12.so
共享对象的起始地址 映射大小 路径全称 2、显示Java堆详细信息
# jmap -heap 26572
using thread-local object allocation. #本地线程分配缓冲
Parallel GC with 2 thread(s) #GC 方式
Heap Configuration: #堆内存初始化配置
MinHeapFreeRatio = 0 #堆最小空闲比率
MaxHeapFreeRatio = 100 #堆最大空闲比率
MaxHeapSize = 2302672896 (2196.0MB) #最大堆空间
NewSize = 767557632 (732.0MB) #新生代初始化大小
MaxNewSize = 767557632 (732.0MB) #新生代最大大小
OldSize = 1535115264 (1464.0MB) #老年代初始化大小
NewRatio = 2 #年轻代与老年代的比值
SurvivorRatio = 8 #E区与S区的大小比值
PermSize = 268435456 (256.0MB) #持久代初始大小
MaxPermSize = 536870912 (512.0MB) #持久代最大大小
G1HeapRegionSize = 0 (0.0MB) #G1垃圾收集算法
Heap Usage: #堆使用情况
PS Young Generation #年轻代情况
Eden Space: #E区
capacity = 758644736 (723.5MB) #E区总大小
used = 282981104 (269.87181091308594MB) #E区已使用
free = 475663632 (453.62818908691406MB) #E区剩余大小
37.30087227547836% used #E区使用百分比
From Space: #其中一个S区
capacity = 4194304 (4.0MB)
used = 1779776 (1.69732666015625MB)
free = 2414528 (2.30267333984375MB)
42.43316650390625% used
To Space: #另一个S区
capacity = 4194304 (4.0MB)
used = 0 (0.0MB)
free = 4194304 (4.0MB)
0.0% used
PS Old Generation #老年代情况
capacity = 1535115264 (1464.0MB)
used = 433724960 (413.6323547363281MB)
free = 1101390304 (1050.3676452636719MB)
28.25357614319181% used
PS Perm Generation #持久代情况
capacity = 268435456 (256.0MB)
used = 117947416 (112.4834213256836MB)
free = 150488040 (143.5165786743164MB)
43.938836455345154% used 3、显示堆中对象的统计信息
# jmap -histo 26572 #统计所有的对象
# jmap -histo:live 26572 #统计活动的对象,先触发gc,再统计(慎用)
num #instances #bytes class name
---------------------------------------------
1: 437341 58118576 [C
2: 1067877 34172064 org.wltea.analyzer.dic.DictSegment
3: 15932 31937960 [B
4: 626394 20044608 [Lorg.wltea.analyzer.dic.DictSegment;
5: 448585 14354720 java.util.HashMap$Node
6: 153452 13503776 java.lang.reflect.Method
7: 11932 12258400 [I
序号 实例个数 大小 类名 4、打印永久代统计信息
# jmap -clstats 26572 #jdk8以后,过程很耗时,并暂停应用(慎用)
# jmap -permstat 26572 #jdk7以前,过程很耗时,并暂停应用 5、打印等待回收的对象信息
# jmap -finalizerinfo 26572
Number of objects pending for finalization: 0 #等候回收的对象为0个 6、堆内存的信息输出到文件
JVM将整个heap的信息写到文件,若heap比较大,耗时会很长,为了保证dump的信息可靠性,会暂停应用,线上环境慎用
# jmap -dump:live,format=b,file=test.log 26572 #live是可选项,只保存活动的对象(慎用)
# jhat -port 7000 test.log #浏览器访问http://127.0.0.1:7000/
堆内存信息以二进制格式保存到指定的文件中,用jhat读取次文件
1) 内存泄漏自动生成文件
-XX:+HeapDumpOnOutOfMemoryError #配置JVM启动参数,让JVM遇到内存泄漏时,自动生成Dump文件
-XX:HeapDumpPath=/path
2) 查看dump文件
# jhat -port 7000 test.log
3、Jinfo 命令
Jinfo: 查看Java的参数,也可动态修改jvm的参数
命令参数
# jinfo pid #查看Java的全部参数和系统属性
# jinfo -flag name pid #查看指定的参数的值
# jinfo -flag +或-name pid #开启或关闭指定的参数
# jinfo -flag name=value pid #修改指定参数的值
# jinfo -flags pid #查看全部的参数
# jinfo -sysprops pid #查看系统属性 1、查看jvm进程的全部参数和系统属性
# jinfo 26572 2、查看指定的参数的值
# jinfo -flag PrintGC 26572 #查看是否开启打印GC日志
-XX:-PrintGC #-:关闭
-XX:+PrintGC #+:开启
# jinfo -flag MaxHeapSize 26572 #查看最大堆内存 3、开启或关闭参数
# jinfo -flag +PrintGC 26572 #开启参数
# jinfo -flag -PrintGC 26572 #关闭参数 4、修改指定参数的值
# jinfo -flag HeapDumpPath=/opt/dump 26572 #不是所有参数都支持动态修改 5、查看全部的参数
# jinfo -flags 26572 6、查看系统属性
# jinfo -sysprops 26572
4、Jstack命令
jstack: 查看Java的线程
命令参数
pid #java的进程号
executable #产生core dump的java可执行程序
core #打印core文件
remote-hostname-or-ip #远程debug服务器的名或IP
server-id: #唯一id,若一台主机上有多个远程debug服务
# jstack -l #列出长列表,关于锁的附加信息(不常用)
# jstack -F #强制列出栈信息,无响应时用(不常用)
# jstack -m #混合模式列出堆栈信息(java和native c/c++) 1、JVM虚拟机信息
# jstack -l 26572
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.221-b11 mixed mode): 2、线程信息
Java线程: 守护线程和用户线程
"http-nio-8081-exec-30" #线程的名(通过Java函数Thread.currentThread().getName()查看线程名字)
daemon #守护线程
prio #线程的优先级
tid #线程id
nid #系统线程id,16进制(通过printf "%x\n" 26572 转换十六进制)
TIMED_WAITING #线程状态 3、线程状态
NEW #初始态(新创建,未启动)
RUNNABLE #就绪态(调用thread.start(),准备运行)
RUNNING #运行态(线程正在执行)
WAITING #等待态(无限期等待)
TIMED_WAITING #超时等待态(有限期等待)
BLOCKED #阻塞态(线程挂起,等待获取锁)
TERMINATED #终止态(线程执行结束后的状态) Deadlock #有死锁
Waiting (on condition) #等待资源或条件唤醒自己
Waiting (on monitor entry) #等待获取锁
Blocked #阻塞 4、统计线程数
# jstack -l 26572 | grep 'java.lang.Thread.State' | wc -l 5、检测死锁
1) 查看cpu占用高进程
# top
2) 查看cpu占用高线程
# top -H -p 26572
3) 转换线程ID
# printf "%x\n" 27720
4) 定位cpu占用线程
# jstack 27720 | grep 6c48 -A 30
jvm性能调优工具的更多相关文章
- 【十一】jvm 性能调优工具之 jmap
jvm 性能调优工具之 jmap 概述 命令jmap是一个多功能的命令.它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息.查看 ClassLoader 的信息以及 fi ...
- jvm 性能调优工具之 jps 命令详解
JPS名称:jps - Java Virtual Machine Process Status Tool命令用法:jps [options] [hostid] options:命令选项,用来对输出格式 ...
- JVM 性能调优工具
jdk自带的工具,在macOs系统中的目录位置(jdk具体版本位置要替换):/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Ho ...
- 【十三】jvm 性能调优工具之 jstack
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- jvm 性能调优工具之 jstat
概述 Jstat是JDK自带的一个轻量级小工具.全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建 ...
- jvm 性能调优工具之 jstat 命令详解
Jstat名称:Java Virtual Machine statistics monitoring tool 官方文档:https://docs.oracle.com/javase/1.5.0/do ...
- 【十二】jvm 性能调优工具之 jhat (JVM Heap Analysis Tool)
jhat也是jdk内置的工具之一.主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言. jhat 非常耗费cpu和内存,所以一般不使 ...
- jvm 性能调优工具之 jmap
概述 命令jmap是一个多功能的命令.它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息.查看 ClassLoader 的信息以及 finalizer 队列. jmap ...
- jvm 性能调优工具之 jmap 命令详解
jmap名称:Java Memory Map(内存映射) 官方文档:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jmap.html ...
随机推荐
- tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:56281 npm ERR! network This is most likely not a problem with npm itself npm ERR! network and is related to network
tunneling socket could not be established, cause=connect ECONNREFUSED 127.0.0.1:56281npm ERR! networ ...
- UnboundLocalError: local variable ‘xxx‘ referenced before assignment
原因 在Python函数中调用了某个和全局变量同名的局部变量,导致编译器不知道此时使用的是全局变量还是局部变量 a = 3 def func(): a+=3 func() UnboundLocalEr ...
- 图表控件Tchart的使用总结
用了一段时间的Tchart,做下记录总结,以便日后查用,有新的记录会及时添加更新 鼠标右键选择Edit可以对图表进行编辑 添加所需图表: Chart --> Series--> Add 1 ...
- HTML的表格标签,列表标签,表单标签,HTML5有哪些新特性
欢迎大家去博客冰山一树Sankey,浏览效果更好.直接右上角搜索该标题即可 博客园主页:博客园主页-冰山一树Sankey CSDN主页:CSDN主页-冰山一树Sankey 前端学习:学习地址:黑马程序 ...
- 基于idea做java程序的本地k8s调试-skaffold(二)
上一篇讲完了java代码发到本机minikube中run,这篇来讲讲minkube中进行debug(idea下) 话说,上篇是把pigx基础infra微服务都发到了minikube中,这些微服务是ru ...
- 《Shader入门精要》第11章-11.3.1流动的河流中的offset.x的解释
在我学习入门精要的时候,经常遇到不解释api,甚至是关键代码的实现原理. 11.3.1流动的河流中的offset.x的sin函数查了一下好像大家也都是书上原话直接复制,现在好不容易想明白了希望能帮到和 ...
- mavan的安装与配置
1.下载mavan 下载路径:http://maven.apache.org/download.cgi 2.安装mavan 将下载好的压缩包解压到指定位置 3.配置系统环境变量 添加一个MAVAN_H ...
- 七天接手react项目 系列
七天接手react项目 背景 假如七天后必须接手一个 react 项目(spug - 一个开源运维平台),而笔者只会 vue,之前没有接触过 react,此刻能做的就是立刻展开一个"7天 r ...
- 单链表上的一系列操作(基于c语言)
单链表的实现分为两种单链表(其实差别并不是很大):带头结点和不带头结点,分别对应下面图中的上下两种. 链表的每一个结点是由两个域组成:数据域和指针域,分别存放所含数据和下一个结点的地址(这都是很明白的 ...
- 活用Windows Server 2008系统的几种安全功能
与传统操作系统相比,Win2008系统的安全防范功能更加强大,安全防护能力自然也是高人一等,我们只要在平时善于使用该系统新增的各项安全防范功能,完全可以实现更高级别的安全保护目的.现在,本文就为大家贡 ...