监控gc
前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案。正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并不断进行调整才能找到最佳设置方案。本文将介绍如果通过工具及Java api来监测JVM的运行状态,并详细介绍各工具的使用方法。
需要监测的数据:(内存使用情况 谁使用了内存 GC的状况)
内存使用情况--heap&PermGen
@ 表示通过jmap –heap pid 可以获取的值
# 表示通过jstat –gcutil pid 可以获取的值
参数的查看可以通过多种方法 本文中只随机列出一种。
| 描述 | 最大值 | 当前值 | 报警值 |
| 堆内存 | @Heap Configuration::MaxHeapSize sum(eden+servivor+old) |
sum(eden+servivor+old) | 自设 |
| 非堆内存 | sum(perm+native) | 无 | |
| Eden | @Eden Space::capacity | @Eden Space::used | 无 |
| Survivor0 | @From Space::capacity | @From Space::used | 无 |
| Survivor1 | @To Space::capacity | @To Space::used | 无 |
| New gen (注意区别于Xmn参数设置) |
@New Generation::capacity Eden + 1 Survivor Space |
@New Generation::used | 无 |
| Old gen | @concurrent mark-sweep generation::capacity (CMS是对old区的gc,所以此处即表示old gen) |
@concurrent mark-sweep generation::capacity(CMS)::used | 自设 |
| Perm Gen | @Perm Generation::capacity | @Perm Generation::used | 自设 |
内存使用情况--config
| 描述 | 配置值 |
| MaxTenuringThreshold | jinfo -flag MaxTenuringThreshold pid |
| MinHeapFreeRatio | @Heap Configuration::MinHeapFreeRatio |
| MaxHeapFreeRatio | @Heap Configuration::MaxHeapFreeRatio |
| new gen gc | @using … in the new generation |
| old gen gc | new gen gc声明下方 |
| 类总数统计 | ?? |
内存使用情况—C heap
- top or ps aux
谁使用了内存
- Heap
jmap –histo
jmap –dump ,then mat - C heap
google perftools
GC的状况
| 描述 | 收集次数 | 收集时间 | 应用暂停时间 |
| Full GC | #FGC | #FGCT | 设置-XX:+PrintGCApplicationStoppedTime后在日志中查看 |
| Young GC | #YGC | #YGCT | 同上 |
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -Xloggc:logs/gc.log
常用工具介绍:jinfo jmap jstack jstat
- 可以从一个给定的java进程或core文件或远程debug服务器上获取java配置信息。包括java系统属性及JVM参数(command line flags)。注意在jvm启动参数中没有配置的参数也可使用jinfo –flag xxx pid输出默认值(很有用,但貌似一些简写的参数查不出来)。
- 可以修改运行时的java 进程的opts。
- 只有solaris和linux的JDK版本里有。
- 使用方式可使用jinfo –h 查询。
观察运行中的jvm物理内存的占用情况。
如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。
参数很简单,直接查看jmap -h
举例:
jmap -heap pid
jmap -dump:format=b,file=heap.hprof <pid>
观察jvm中当前所有线程的运行情况和线程当前状态
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
参数很简单,直接查看jstack -h
举例:
jstack pid
JVM监测工具(Java Virtual Machine Statistics Monitoring Tool)。利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括各种堆和非堆的大小及其内存使用量、classloader、compiler、垃圾回收状况等。
举例:
jstat –printcompilation -h10 3024 250 600
每250毫秒打印一次,一共打印600次 每隔10行显示一次head
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数介绍:
- -h n 每隔几行输出标题
- vmid VM的进程号,即当前运行的java进程号
- -t 在第一列显示自JVM启动以来的时间戳
- -J 修改java进程的参数。类似jinfo -flag <name>=<value>。例如-J-Xms48m 设置初始堆为48M。详见这里。这个参数挺有用的,可以在运行中调整参数以方便测试、监测。
- -option option为要检测的参数。参数列表可通过jstat –options 获取。下面将分别介绍每个参数及输出字段的含义。
| class | 统计class loader行为信息 |
| compiler | 统计编译行为信息 |
| gc | 统计jdk gc时heap信息 |
| gccapacity | 统计堆内存不同代的heap容量信息 |
| gccause | 统计gc的情况(同-gcutil)和引起gc的事件 |
| gcnew | 统计gc时新生代的信息(相比gcutil更详细) |
| gcnewcapacity | 统计gc时新生代heap容量 |
| gcold | 统计gc时,老年区的情况 |
| gcoldcapacity | 统计gc时,老年区heap容量 |
| gcpermcapacity | 统计gc时,permanent区heap容量 |
| gcutil | 统计gc时,heap情况 |
| printcompilation | 统计编译行为信息 |
-class option:Class Loader Statistics
| Column | Description |
|---|---|
| Loaded | Number of classes loaded. |
| Bytes | Number of Kbytes loaded. |
| Unloaded | Number of classes unloaded. |
| Bytes | Number of Kbytes unloaded. |
| Time | Time spent performing class load and unload operations. |
-compiler:HotSpot Just-In-Time Compiler Statistics
| Column | Description |
|---|---|
| Compiled | Number of compilation tasks performed. |
| Failed | Number of compilation tasks that failed. |
| Invalid | Number of compilation tasks that were invalidated. |
| Time | Time spent performing compilation tasks. |
| FailedType | Compile type of the last failed compilation. |
| FailedMethod | Class name and method for the last failed compilation. |
-gc Option:Garbage-collected heap statistics
| Column | Description |
|---|---|
| S0C | Current survivor space 0 capacity (KB). |
| S1C | Current survivor space 1 capacity (KB). |
| S0U | Survivor space 0 utilization (KB). |
| S1U | Survivor space 1 utilization (KB). |
| EC | Current eden space capacity (KB). |
| EU | Eden space utilization (KB). |
| OC | Current old space capacity (KB). |
| OU | Old space utilization (KB). |
| PC | Current permanent space capacity (KB). |
| PU | Permanent space utilization (KB). |
| YGC | Number of young generation GC Events. |
| YGCT | Young generation garbage collection time. |
| FGC | Number of full GC events. |
| FGCT | Full garbage collection time. |
| GCT | Total garbage collection time. |
-gccapacity Option:Memory Pool Generation and Space Capacities
| Column | Description |
|---|---|
| NGCMN | Minimum new generation capacity (KB). |
| NGCMX | Maximum new generation capacity (KB). |
| NGC | Current new generation capacity (KB). |
| S0C | Current survivor space 0 capacity (KB). |
| S1C | Current survivor space 1 capacity (KB). |
| EC | Current eden space capacity (KB). |
| OGCMN | Minimum old generation capacity (KB). |
| OGCMX | Maximum old generation capacity (KB). |
| OGC | Current old generation capacity (KB). |
| OC | Current old space capacity (KB). |
| PGCMN | Minimum permanent generation capacity (KB). |
| PGCMX | Maximum Permanent generation capacity (KB). |
| PGC | Current Permanent generation capacity (KB). |
| PC | Current Permanent space capacity (KB). |
| YGC | Number of Young generation GC Events. |
| FGC | Number of Full GC Events. |
-gccause Option:Garbage Collection Statistics, Including GC Events
| Column | Description |
|---|---|
| LGCC | Cause of last Garbage Collection. |
| GCC | Cause of current Garbage Collection. |
前面的字段与gcutil相同.
-gcnew Option:New Generation Statistics
| Column | Description |
|---|---|
| S0C | Current survivor space 0 capacity (KB). |
| S1C | Current survivor space 1 capacity (KB). |
| S0U | Survivor space 0 utilization (KB). |
| S1U | Survivor space 1 utilization (KB). |
| TT | Tenuring threshold. |
| MTT | Maximum tenuring threshold. |
| DSS | Desired survivor size (KB). |
| EC | Current eden space capacity (KB). |
| EU | Eden space utilization (KB). |
| YGC | Number of young generation GC events. |
| YGCT | Young generation garbage collection time. |
-gcnewcapacity Option:New Generation Space Size Statistics
| Column | Description |
|---|---|
| NGCMN | Minimum new generation capacity (KB). |
| NGCMX | Maximum new generation capacity (KB). |
| NGC | Current new generation capacity (KB). |
| S0CMX | Maximum survivor space 0 capacity (KB). |
| S0C | Current survivor space 0 capacity (KB). |
| S1CMX | Maximum survivor space 1 capacity (KB). |
| S1C | Current survivor space 1 capacity (KB). |
| ECMX | Maximum eden space capacity (KB). |
| EC | Current eden space capacity (KB). |
| YGC | Number of young generation GC events. |
| FGC | Number of Full GC Events. |
-gcold Option:Old and Permanent Generation Statistics
| Column | Description |
|---|---|
| PC | Current permanent space capacity (KB). |
| PU | Permanent space utilization (KB). |
| OC | Current old space capacity (KB). |
| OU | old space utilization (KB). |
| YGC | Number of young generation GC events. |
| FGC | Number of full GC events. |
| FGCT | Full garbage collection time. |
| GCT | Total garbage collection time. |
-gcoldcapacity Option:Old Generation Statistics
| Column | Description |
|---|---|
| OGCMN | Minimum old generation capacity (KB). |
| OGCMX | Maximum old generation capacity (KB). |
| OGC | Current old generation capacity (KB). |
| OC | Current old space capacity (KB). |
| YGC | Number of young generation GC events. |
| FGC | Number of full GC events. |
| FGCT | Full garbage collection time. |
| GCT | Total garbage collection time. |
-gcpermcapacity Option: Permanent Generation Statistics
| Column | Description |
|---|---|
| PGCMN | Minimum permanent generation capacity (KB). |
| PGCMX | Maximum permanent generation capacity (KB). |
| PGC | Current permanent generation capacity (KB). |
| PC | Current permanent space capacity (KB). |
| YGC | Number of young generation GC events. |
| FGC | Number of full GC events. |
| FGCT | Full garbage collection time. |
| GCT | Total garbage collection time. |
-gcutil Option:Summary of Garbage Collection Statistics
| Column | Description |
|---|---|
| S0 | Survivor space 0 utilization as a percentage of the space's current capacity. |
| S1 | Survivor space 1 utilization as a percentage of the space's current capacity. |
| E | Eden space utilization as a percentage of the space's current capacity. |
| O | Old space utilization as a percentage of the space's current capacity. |
| P | Permanent space utilization as a percentage of the space's current capacity. |
| YGC | Number of young generation GC events. |
| YGCT | Young generation garbage collection time. |
| FGC | Number of full GC events. |
| FGCT | Full garbage collection time. |
| GCT | Total garbage collection time. |
-printcompilation Option: HotSpot Compiler Method Statistics
| Column | Description |
|---|---|
| Compiled | Number of compilation tasks performed. |
| Size | Number of bytes of bytecode for the method. |
| Type | Compilation type. |
| Method | Class name and method name identifying the compiled method. Class name uses "/" instead of "." as namespace separator. Method name is the method within the given class. The format for these two fields is consistent with the HotSpot - XX:+PrintComplation option. |
Java api方式监测
jre中提供了一些查看运行中的jvm内部信息的api,这些api包含在java.lang.management包中,此包中的接口是在jdk 5中引入的,所以只有在jdk 5及其以上版本中才能通过这种方式访问这些信息。下面简单介绍一下这包括哪些信息,以及如何访问。
可以通过此api访问到运行中的jvm的类加载的信息、jit编译器的信息、内存分配的情况、线程的相关信息以及运行jvm的操作系统的信息。java.lang.management包中提供了9个接口来访问这些信息,使用ManagementFactory的静态get方法可以获得相应接口的实例,可以通过这些实例来获取你需要的相关信息。
更详细的关于MBean的介绍参见Java SE 6 新特性: JMX 与系统管理
demo1:查看一下当前运行的jvm中加载了多少个类。想详细了解如何使用这些api,可以参考java.lang.management包中的详细api文档。
public class ClassLoaderChecker {
public static void main( String[] args ) throws Exception {
ClassLoadingMXBean bean = ManagementFactory.getClassLoadingMXBean();
System.out.println( bean.getLoadedClassCount() );
}
}
demo2:自定义Mbean Type,记录的数据可通过jconsole等工具或自写代码查看,
//工具方法
public static ObjectName register(String name, Object mbean) {
try {
ObjectName objectName = new ObjectName(name);
MBeanServer mbeanServer = ManagementFactory
.getPlatformMBeanServer();
try {
mbeanServer.registerMBean(mbean, objectName);
} catch (InstanceAlreadyExistsException ex) {
mbeanServer.unregisterMBean(objectName);
mbeanServer.registerMBean(mbean, objectName);
}
return objectName;
} catch (JMException e) {
throw new IllegalArgumentException(name, e);
}
}
相关推荐文章:
参考:
http://www.51testing.com/?uid-183198-action-viewspace-itemid-185174
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat
http://stl-www.htw-saarland.de/syst-lab/java/jdk-1_5_0/docs/tooldocs/share/jinfo.html
http://www.coderanch.com/t/329407/java/java/find-all-loaded-classes-classloaders
监控gc的更多相关文章
- jstat监控gc情况
jstat监控gc情况 JavaJVMJ2SE应用服务器SUN 性能测试过程中,我们该如何监控java虚拟机内存的使用情况,用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的t ...
- 本地jvisualvm通过jstatd远程监控GC
1.查找jdk路径 [root@xxx ~]# which java /data/soft/jdk1.8.0_221/bin/java 2.进入jdk的bin目录下添加指定安全策略文件,注意jdk路径 ...
- Spark的Straggler深入学习(1):如何在本地图形监控远程Spark的GC情况——使用java自带的jvisualvm
一.本文的目的 Straggler是目前研究的热点,Spark中也存在Straggler的问题.GC问题是总所周知的导致Straggler的重要因素之一,为了了解GC导致的Straggle ...
- [译]GC专家系列2:Java 垃圾回收的监控
原文链接:http://www.cubrid.org/blog/dev-platform/how-to-monitor-java-garbage-collection/ 这是"成为GC专家系 ...
- Java GC专家系列2:Java 垃圾回收的监控
这是”成为GC专家系列”文章的第二篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.到目前为止,你应该已经了解了JDK 7中的5种GC类型 ...
- Java GC - 监控回收行为与日志分析
1. 简介 在上一篇介绍<Java GC - 垃圾回收机制>, 本文将介绍如何监控 Javc GC 行为,同时涉及一些GUI工具的使用(虽然有些已经很老并不再更新),监控GC在于判断JVM ...
- Weblogic/WAS之Full GC监控与计算
在网上看到关于内存回收机制,同大家一起分析探讨.堆内存划分为Eden.Survivor 和 Tenured/Old 空间,如下图所示: Minor GC 会清理年轻代的内存,Major GC 是清理老 ...
- Java系列笔记(4) - JVM监控与调优
目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 光说不练假把式,学习Java GC机制的目的是为了实用,也就是为了在JVM出现问题时分析原因并解决之.通过学习,我觉得JVM ...
- JVM监控与调优
目录 参数设置收集器搭配启动内存分配监控工具和方法调优方法调优实例 转:http://www.cnblogs.com/zhguang/p/java-jvm-gc.html光说不练假把式,学习J ...
随机推荐
- 前端学习 html
Html 前端学习 <!DOCTYPE html> < lang="en"> <head> <meta charset="UTF ...
- asp xml对象转换为string
'xml文件中没有属性的情况 Dim xmlStrxmlStr="<root><count>1</count><error>0</err ...
- yii2.0面包屑的使用及启用中文
(注:己yii2.0高级应用为例) 面包屑在布局里定义好之后,在视图中直接使即可,但默是使用英文. 一.布局中定义面包屑 backend/views/layout/main.php: use back ...
- CSS3入门
CSS3 w3cschools css3 MDN英文 MDN中文 CSS3 is the latest evolution of the Cascading Style Sheets langua ...
- 重读The C programming Lanuage 笔记二:运算符优先级
运算符的优先级和结合性有明确的规定,但是,除少数例外情况外,表达式的求值次序没有定义,甚至某些有副作用的子表达式也没有定义. 也就是说运算符的定义保证了其操作数按某一特定的顺序求值,否则具体实现可以自 ...
- 对dpkg: error processing package xxx (--configure) 的处理
这个问题是在在安装Deepdive时候碰到的,具体来说在执行 sudo apt-get update碰到的sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_ ...
- Winform 无边框窗口移动自定义边框粗细颜色
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- express学习点滴- 永远不要忘记异步
直接上两段代码,因为nodejs基于异步和事件回调的解决方式,涉及到异步的时候,问题往往藏得很深,以下这个简单的问题困扰了很久.之前怀疑是各种问题,到处改.直到最后一步一步跟代码,跟操作数据库部分豁然 ...
- PHP命名空间(Namespace)的使用详解
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...
- HTML5 中的新特性:
一,用于绘画的 canvas 元素,<canvas>标签替代Flash Flash给很多Web开发者带来了麻烦,要在网页上播放Flash需要一堆代码和插件.<canvas>标签 ...