JVM内存监控(五)
jstat
注以下命令 后面加个毫秒数可以每多少毫秒采集一次
类加载统计
root@iZ2ze2u21foywir3wp68o6Z dubbo_service]# jstat -class 10755 Loaded(加载class的数量kb) Bytes(所占用空间大小kb) Unloaded(未加载数量kb) Bytes(未加载占用空间kb) Time(时间)
15780 30092.6 210 282.2 8.39
编译统计
[root@iZ2ze2u21foywir3wp68o6Z dubbo_service]# jstat -compiler 10755
Compiled(编译数量) Failed(失败数量) Invalid(不可用数量) Time (时间) FailedType(失败类型) FailedMethod(失败方法)
20007 3 0 98.91 1 com/mysql/jdbc/AbandonedConnectionCleanupThread run
gc统计
jstat -gc 10755 1000 #1秒采集一次
jstat -gc 1075
S0C:年轻代中 To Survivor 的容量(单位 KB);
S1C:年轻代中 From Survivor 的容量(单位 KB);
S0U:年轻代中 To Survivor 目前已使用空间(单位 KB);
S1U:年轻代中 From Survivor 目前已使用空间(单位 KB);
EC:年轻代中 Eden 的容量(单位 KB);
EU:年轻代中 Eden 目前已使用空间(单位 KB);
OC:Old 代的容量(单位 KB);
OU:Old 代目前已使用空间(单位 KB);
MC:Metaspace 的容量(单位 KB);
MU:Metaspace 目前已使用空间(单位 KB);
YGC:从应用程序启动到采样时年轻代中 gc 次数;
YGCT:从应用程序启动到采样时年轻代中 gc 所用时间 (s);
FGC:从应用程序启动到采样时 old 代(全 gc)gc 次数;
FGCT:从应用程序启动到采样时 old 代(全 gc)gc 所用时间 (s);
GCT:从应用程序启动到采样时 gc 用的总时间 (s)。
堆内分配统计
jstat -gccapacity 10755
NGCMN:新生代最小容量
NGCMX:新生代最大容量
NGC:当前新生代容量
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
EC:伊甸园区的大小
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:当前老年代大小
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代gc次数
FGC:老年代GC次数
新生代gc和内存情况统计
jstat -gcnew 10755
S0C:第一个幸存区大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
TT:对象在新生代存活的次数
MTT:对象在新生代存活的最大次数
DSS:期望的幸存区大小
EC:伊甸园区的大小
EU:伊甸园区的使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
老年代gc和内存情况统计
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:老年代大小
OU:老年代使用大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
老年代垃圾回收统计
jstat -gcold 10755
老年代内存统计
jstat -gcoldcapacity 10755
OGCMN:老年代最小容量
OGCMX:老年代最大容量
OGC:当前老年代大小
OC:老年代大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
jdk1.7永久代统计
jstat -gcpermcapacity 19570
PGCMN:最小永久代容量
PGCMX:最大永久代容量
PGC:当前新生成的永久代空间大小
PC :永久代空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
JDK8 下 元数据空间统计
jstat -gcmetacapacity 10755
S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
总结垃圾回收统计
jstat -gcutil 10755
jstack
用来dump线程的堆栈信息 排查死锁和高cpu代码定位
jstack 19751|grep -A20 5295 //查找5295 并打印后20行
jstack 19751|grep -A20 5295 >/root/threaddump.txt//查找5295 并打印后20行 并输出到指定文件
jstack 19751 >/root/threaddump.txt// dump整个线程堆栈并输出到指定文件
JMAP
查看jvm配置以及内存信息
1.通过ps -ef找到PID
ps -ef|grep "程序名字"
2.通过jmap打印jvm信息
jmap -heap PID
如果出现: sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.191-b12. Target VM is 错误可能是系统装了多jdk,定位到当前jdk 指定使用binn下面的jmap
[root@kuaihe-test3 bin]# ./jmap -heap 19751
Attaching to process ID 19751, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
#垃圾回收器信息
using thread-local object allocation. # 指的是本地线程分配缓冲(TLAB,Thread Local Allocation Buffer)。并不是栈上分配(Stack Allocation,HotSpot暂时没有做这项优化)。
Parallel GC with 8 thread(s) #并行 8个gc线程 Heap Configuration:
MinHeapFreeRatio = 0 #最小堆使用比例
MaxHeapFreeRatio = 100 #最大堆使用比例
MaxHeapSize = 4164943872 (3972.0MB) #最大堆空间大小
NewSize = 87031808 (83.0MB) #新生代分配大小
MaxNewSize = 1388314624 (1324.0MB) #最大新生代可分配大小
OldSize = 175112192 (167.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 = 742391808 (708.0MB)
used = 9056640 (8.6370849609375MB)
free = 733335168 (699.3629150390625MB)
1.2199272543697033% used
From Space:
capacity = 2097152 (2.0MB)
used = 0 (0.0MB)
free = 2097152 (2.0MB)
0.0% used
To Space:
capacity = 13631488 (13.0MB)
used = 0 (0.0MB)
free = 13631488 (13.0MB)
0.0% used
PS Old Generation
capacity = 2776629248 (2648.0MB)
used = 2699893784 (2574.8193588256836MB)
free = 76735464 (73.1806411743164MB)
97.23638062030527% used
配置解读
1: MinHeapFreeRatio=<n>
指定 jvm heap 在使用率小于 n 的情况下 ,heap 进行收缩 ,Xmx==Xms 的情况下无效 , 如 :-XX:MinHeapFreeRatio=30
2: MaxHeapFreeRatio=<n>
指定 jvm heap 在使用率大于 n 的情况下 ,heap 进行扩张 ,Xmx==Xms 的情况下无效 , 如 :-XX:MaxHeapFreeRatio=70
3:MaxHeapSize=<n>
最大堆内存(绝对值) 如:-Xmx100m
4:NewSize=<n>
设置年轻代大小(绝对值) 如-XX:NewSize=100m
e:MaxNewSize=<n>
年轻代最大内存(绝对值),如:-XX:MaxNewSize=100m
5:OldSize=<n>
设置JVM启动分配的老年代内存大小 如:-XX:OldSize=60M
6:NewRatio=<n>
年轻代与老年代的比例 如-XX:NewRatio=2 则 为1:2
7:SurvivorRatio=<n>
轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个如:-XX:SurvivorRatio=8 则eden区和2个Survivor 是8:1:1
8:MetaspaceSize=<n>
元空间大小元空间大小,元空间本质跟永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代最大的区别在于:元空间并不在虚拟机中,而是使用本机内存。因此,元空间大小仅受本地内存限制。 如:-XX:MetaspaceSize=512m
9:CompressedClassSpaceSize=<n>
作用:https://www.zhihu.com/question/268392125
10:MaxMetaspaceSize=<n>
元空间的最大值 每次扩容会需要产生fullgc 下面分别为 年轻代 eden区 form to区,老年代的内存大小、使用内存 、可用内存。
dump内存信息
jmap -dump:format=b,file=/Users/liqiang/Desktop/logs/heap.hprof pid
查看存活对象情况
#只统计存活对象
jmap -histo:live 11230 //只统计存活对象
jmap -histo:live 11230 >/root/histo.txt //输出到指定路径
#包含未存活对象
jmap -histo 11230
jmap -histo: 11230 >/root/histo.txt //输出到指定路径
查看正在等待执行finalizer方法的对象
jmap -finalizerinfo 10755//10755为PID
说明当前F-Queue队列中并没有等待Finalizer线程执行finalizer方法的对象。
在jvm回收时标记为垃圾对象,等待被回收时的对象
查看 & 分析 GC 日志
-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-Xloggc:../logs/gc.log 日志文件的输出路径
参数配置
-XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./gclogs
gc日志
Java HotSpot(TM) 64-Bit Server VM (25.181-b13) for bsd-amd64 JRE (1.8.0_181-b13), built on Jul 7 2018 01:02:31 by "java_re" with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
Memory: 4k page, physical 16777216k(474256k free) /proc/meminfo: CommandLine flags: -XX:InitialHeapSize=1048576 -XX:MaxHeapSize=1048576 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
2020-05-12T13:44:18.823-0800: 0.066: [GC (Allocation Failure) [PSYoungGen: 512K->512K(1024K)] 512K->512K(1536K), 0.0006502 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2020-05-12T13:44:18.845-0800: 0.088: [GC (Allocation Failure) [PSYoungGen: 1024K->496K(1024K)] 1024K->528K(1536K), 0.0006331 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2020-05-12T13:44:18.857-0800: 0.100: [GC (Allocation Failure) [PSYoungGen: 1005K->512K(1024K)] 1037K->669K(1536K), 0.0005879 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2020-05-12T13:44:18.869-0800: 0.112: [GC (Allocation Failure) [PSYoungGen: 1024K->512K(1024K)] 1181K->745K(1536K), 0.0010783 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
2020-05-12T13:44:18.880-0800: 0.123: [GC (Allocation Failure) [PSYoungGen: 1024K->512K(1024K)] 1257K->865K(1536K), 0.0011893 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
2020-05-12T13:44:18.881-0800: 0.124: [Full GC (Ergonomics) [PSYoungGen: 512K->479K(1024K)] [ParOldGen: 353K->182K(512K)] 865K->661K(1536K), [Metaspace: 3189K->3189K(1056768K)], 0.0047289 secs] [Times: user=0.03 sys=0.00, real=0.00 secs]
2020-05-12T13:44:18.887-0800: 0.130: [GC (Allocation Failure) --[PSYoungGen: 991K->991K(1024K)] 1173K->1501K(1536K), 0.0008886 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
2020-05-12T13:44:18.888-0800: 0.131: [Full GC (Ergonomics) [PSYoungGen: 991K->27K(1024K)] [ParOldGen: 510K->508K(512K)] 1501K->535K(1536K), [Metaspace: 3190K->3190K(1056768K)], 0.0072092 secs] [Times: user=0.04 sys=0.00, real=0.01 secs]
2020-05-12T13:44:18.896-0800: 0.139: [Full GC (Ergonomics) [PSYoungGen: 490K->470K(1024K)] [ParOldGen: 508K->508K(512K)] 999K->978K(1536K), [Metaspace: 3213K->3213K(1056768K)], 0.0105437 secs] [Times: user=0.07 sys=0.00, real=0.01 secs]
2020-05-12T13:44:18.907-0800: 0.149: [Full GC (Allocation Failure) [PSYoungGen: 470K->470K(1024K)] [ParOldGen: 508K->499K(512K)] 978K->970K(1536K), [Metaspace: 3213K->3213K(1056768K)], 0.0097518 secs] [Times: user=0.06 sys=0.00, real=0.01 secs]
2020-05-12T13:44:18.918-0800: 0.160: [Full GC (Ergonomics) [PSYoungGen: 512K->0K(1024K)] [ParOldGen: 509K->200K(512K)] 1021K->200K(1536K), [Metaspace: 3238K->3238K(1056768K)], 0.0038644 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
Heap
PSYoungGen total 1024K, used 37K [0x00000007bfe80000, 0x00000007c0000000, 0x00000007c0000000)
eden space 512K, 7% used [0x00000007bfe80000,0x00000007bfe89748,0x00000007bff00000)
from space 512K, 0% used [0x00000007bff00000,0x00000007bff00000,0x00000007bff80000)
to space 512K, 61% used [0x00000007bff80000,0x00000007bffce4a8,0x00000007c0000000)
ParOldGen total 512K, used 200K [0x00000007bfe00000, 0x00000007bfe80000, 0x00000007bfe80000)
object space 512K, 39% used [0x00000007bfe00000,0x00000007bfe322e8,0x00000007bfe80000)
Metaspace used 3282K, capacity 4500K, committed 4864K, reserved 1056768K
class space used 359K, capacity 388K, committed 512K, reserved 1048576K
gcviewer
下载地址:https://sourceforge.net/projects/gcviewer/ 将日志拖到gcviewer或者使用gcviewer打开
各个参数详解见github:https://github.com/chewiebug/GCViewer
GCeasy
将gc日志压缩上传https://www.gceasy.io/index.jsp
各个代分配情况 以及最大峰值使用情况
各个停顿时间的次数和所占百分比 以及最大停顿和平均停顿时间
各个代回收次数 以及停顿时间统计
JVM内存监控(五)的更多相关文章
- 【性能测试】:JVM内存监控策略的方法,以及监控结果说明
JVM内存监控主要在稳定性压测期间,监控应用服务器内存泄露等问题: [JVM远程监控设置] 1.打开WAS控制台:https://ip:port/ibm/console/login.do 2.进入路径 ...
- jvm内存监控
jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程 ...
- JVM内存监控:visualVM jconsole jstatd jmap
本文是亲自测试的详细配置过程,不是转载而且linux下不需修改/etc/hosts文件 由于在建项目的需要,监控tomcat的内存使用,检查内存泄漏的情况.其实JDK自身已经提供了很多工具,都在JAV ...
- JVM内存模型总结,有各版本JDK对比、有元空间OOM监控案例、有Java版虚拟机,综合实践学习!
作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...
- JVM学习总结五——性能监控及故障处理工具
之前扯了四篇理论,这一篇终于可以动动手了.本篇我们将介绍JVM常用的一些工具,这些工具将是我们监控JVM状态.处理故障和调优分析的利器. 不过在开始之前,我还是要先车扯两句:工具终归只是帮助我们我们处 ...
- 管中窥豹——从对象的生命周期梳理JVM内存结构、GC调优、类加载、AOP编程及性能监控
如题,本文的宗旨既是透过对象的生命周期,来梳理JVM内存结构及GC相关知识,并辅以AOP及双亲委派机制原理,学习不仅仅是海绵式的吸收学习,还需要自己去分析why,加深对技术的理解和认知,祝大家早日走上 ...
- 监控JVM内存使用情况,剩余空间小于2M时报警
一个简单的类,用来监控JVM内存使用情况,剩余空间小于2M时报警. import java.lang.management.ManagementFactory; import java.lang.ma ...
- Zabbix监控JVM内存
上篇最后提到了jstat,jstat可以查看统计JVM内存信息,那么结合Zabbix,就可以监控多实例的JVM内存了. 1.下面两个脚本部署在被监控主机: vm.py 用于JVM实例PID查找,ps命 ...
- JVM虚拟机(五):JDK8内存模型—消失的PermGen
一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈: 每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫“ ...
随机推荐
- [Apple开发者帐户帮助]七、注册设备(2)注册多个设备
如果您有许多测试设备,则可以创建包含设备名称和设备ID的文件,并将整个文件上载到开发人员帐户.您的开发人员帐户支持以下两种文件格式:具有.deviceids文件扩展名和纯文本文件的属性列表文件.您选择 ...
- 关于C++ const 变量
const 的全局变量是储存在一个只读数据段中,虽然你可以定义一个指向它的指针,却会在运行时,在对该地址赋值的时候发生运行错误,而局部的const变量是储存在栈中的,离开作用域后同样会被释放,并且可以 ...
- ASP.NET MVC5 之 Log4Net 的学习和使用
最近在学习 log4Net 插件,在博客园找到了好多资料,但是实现起来还是有点麻烦. 现在记录下学习的过程,期间可能加载着借鉴和转载的代码. 1.配置文件的设置: 新建config文件夹下 log4n ...
- Codeforces Round 411 Div.2 题解
A Fake NP standard input/output s, MB Submit Add to favourites x3673 B -palindrome standard input/ou ...
- python中的深拷贝和浅拷贝(面试题)
一.浅拷贝 定义:浅拷贝只是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值. 浅拷贝的特点: 公用一个值: 这两个变量的内存地址一样: 对其中一个变量的值改变,另外一个变量的值也 ...
- 设置myeclipse的JSP、HTML的页面编码格式
JSP编码格式: 点击菜单上的window--->preferences 在弹出的对话框中点击MyEclise--->Files and Editors--->JSP, 在Encod ...
- Python随笔-快排
def swap(arr, i, j): temp = arr[i] arr[i] = arr[j] arr[j] = temp def part(arr, beg, end): : return b ...
- Spring.net(v1.3.2) 官网API-第一章 前言
虽然有很好的工具和技术,但是开发软件应用仍然是很困难的.Spring为构建企业级应用提供了一个轻量级的解决方案,Spring提供了一个统一的.透明的方式去配置你的应用,和将AOP集成到你的软件中.Sp ...
- [ AHOI 2008 ] Meet
\(\\\) \(Description\) 一棵\(N\)个节点的树,每条边权都为\(1\). \(M\)组询问,每次给出三个点\(A_i,B_i,C_i\),求从三个点分别出发,移动到同一个点的路 ...
- [Windows Server 2008] IIS自带FTP配置方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:IIS自带FT ...