JVM系列五:JVM监测工具[整理中]

转自本站:http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html

 前几篇篇文章介绍了介绍了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

描述配置值
MaxTenuringThresholdjinfo -flag MaxTenuringThreshold pid
MinHeapFreeRatio@Heap Configuration::MinHeapFreeRatio
MaxHeapFreeRatio@Heap Configuration::MaxHeapFreeRatio
new gen gc@using … in the new generation
old gen gcnew 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

jinfo 

  • 可以从一个给定的java进程或core文件或远程debug服务器上获取java配置信息。包括java系统属性及JVM参数(command line flags)。注意在jvm启动参数中没有配置的参数也可使用jinfo –flag xxx pid输出默认值(很有用,但貌似一些简写的参数查不出来)。
  • 可以修改运行时的java 进程的opts。
  • 只有solaris和linux的JDK版本里有。
  • 使用方式可使用jinfo –h 查询。

jmap

       观察运行中的jvm物理内存的占用情况。

       如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。

       参数很简单,直接查看jmap -h

       举例:

jmap -heap pid

jmap -dump:format=b,file=heap.hprof <pid>

dump文件可以通过MemoryAnalyzer分析查看.网址:http://www.eclipse.org/mat/,可以查看dump时对象数量,内存占用,线程情况等。
jmap -dump:live为啥会触发Full GC

jstack

       观察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

jstat

       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

ColumnDescription
LoadedNumber of classes loaded.
BytesNumber of Kbytes loaded.
UnloadedNumber of classes unloaded.
BytesNumber of Kbytes unloaded.
TimeTime spent performing class load and unload operations.

-compiler:HotSpot Just-In-Time Compiler Statistics

ColumnDescription
CompiledNumber of compilation tasks performed.
FailedNumber of compilation tasks that failed.
InvalidNumber of compilation tasks that were invalidated.
TimeTime spent performing compilation tasks.
FailedTypeCompile type of the last failed compilation.
FailedMethodClass name and method for the last failed compilation.

-gc Option:Garbage-collected heap statistics

ColumnDescription
S0CCurrent survivor space 0 capacity (KB).
S1CCurrent survivor space 1 capacity (KB).
S0USurvivor space 0 utilization (KB).
S1USurvivor space 1 utilization (KB).
ECCurrent eden space capacity (KB).
EUEden space utilization (KB).
OCCurrent old space capacity (KB).
OUOld space utilization (KB).
PCCurrent permanent space capacity (KB).
PUPermanent space utilization (KB).
YGCNumber of young generation GC Events.
YGCTYoung generation garbage collection time.
FGCNumber of full GC events.
FGCTFull garbage collection time.
GCTTotal garbage collection time.

-gccapacity Option:Memory Pool Generation and Space Capacities

ColumnDescription
NGCMNMinimum new generation capacity (KB).
NGCMXMaximum new generation capacity (KB).
NGCCurrent new generation capacity (KB).
S0CCurrent survivor space 0 capacity (KB).
S1CCurrent survivor space 1 capacity (KB).
ECCurrent eden space capacity (KB).
OGCMNMinimum old generation capacity (KB).
OGCMXMaximum old generation capacity (KB).
OGCCurrent old generation capacity (KB).
OCCurrent old space capacity (KB).
PGCMNMinimum permanent generation capacity (KB).
PGCMXMaximum Permanent generation capacity (KB).
PGCCurrent Permanent generation capacity (KB).
PCCurrent Permanent space capacity (KB).
YGCNumber of Young generation GC Events.
FGCNumber of Full GC Events.

-gccause Option:Garbage Collection Statistics, Including GC Events

ColumnDescription
LGCCCause of last Garbage Collection.
GCCCause of current Garbage Collection.

       前面的字段与gcutil相同.

-gcnew Option:New Generation Statistics

ColumnDescription
S0CCurrent survivor space 0 capacity (KB).
S1CCurrent survivor space 1 capacity (KB).
S0USurvivor space 0 utilization (KB).
S1USurvivor space 1 utilization (KB).
TTTenuring threshold.
MTTMaximum tenuring threshold.
DSSDesired survivor size (KB).
ECCurrent eden space capacity (KB).
EUEden space utilization (KB).
YGCNumber of young generation GC events.
YGCTYoung generation garbage collection time.

-gcnewcapacity Option:New Generation Space Size Statistics

ColumnDescription
NGCMN           Minimum new generation capacity (KB). 
NGCMX    Maximum new generation capacity (KB).
NGC    Current new generation capacity (KB).
S0CMXMaximum survivor space 0 capacity (KB).
S0CCurrent survivor space 0 capacity (KB).
S1CMXMaximum survivor space 1 capacity (KB).
S1CCurrent survivor space 1 capacity (KB).
ECMXMaximum eden space capacity (KB).
ECCurrent eden space capacity (KB).
YGCNumber of young generation GC events.
FGCNumber of Full GC Events.

-gcold Option:Old and Permanent Generation Statistics

ColumnDescription
PCCurrent permanent space capacity (KB).
PUPermanent space utilization (KB).
OCCurrent old space capacity (KB).
OUold space utilization (KB).
YGCNumber of young generation GC events.
FGCNumber of full GC events.
FGCTFull garbage collection time.
GCTTotal garbage collection time.

-gcoldcapacity Option:Old Generation Statistics

ColumnDescription
OGCMNMinimum old generation capacity (KB).
OGCMXMaximum old generation capacity (KB).
OGCCurrent old generation capacity (KB).
OCCurrent old space capacity (KB).
YGCNumber of young generation GC events.
FGCNumber of full GC events.
FGCTFull garbage collection time.
GCTTotal garbage collection time.

-gcpermcapacity Option: Permanent Generation Statistics

ColumnDescription
PGCMNMinimum permanent generation capacity (KB).
PGCMXMaximum permanent generation capacity (KB).
PGCCurrent permanent generation capacity (KB).
PCCurrent permanent space capacity (KB).
YGCNumber of young generation GC events.
FGCNumber of full GC events.
FGCTFull garbage collection time.
GCTTotal garbage collection time.

-gcutil Option:Summary of Garbage Collection Statistics

ColumnDescription
S0Survivor space 0 utilization as a percentage of the space's current capacity.
S1Survivor space 1 utilization as a percentage of the space's current capacity.
EEden space utilization as a percentage of the space's current capacity.
OOld space utilization as a percentage of the space's current capacity.
PPermanent space utilization as a percentage of the space's current capacity.
YGCNumber of young generation GC events.
YGCTYoung generation garbage collection time.
FGCNumber of full GC events.
FGCTFull garbage collection time.
GCTTotal garbage collection time.

-printcompilation Option: HotSpot Compiler Method Statistics

ColumnDescription
CompiledNumber of compilation tasks performed.
SizeNumber of bytes of bytecode for the method.
TypeCompilation type.
MethodClass 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);
}
}

//步骤一:定义Mbean接口:
//随便定义
public interface DemoMBean {
public AtomicLong getInvokeCount();
}
//步骤二:实现接口,并注册:
public class DemoImpl implements DemoMBean{
public final static String DEFAULT_OBJECT_NAME_PREFIX = "com.redcreen.demo:type=demo";
register("com.redcreen.demo:type=demo",DemoImpl.instance);
}
//可以通过jconsole中查看数据了

相关推荐文章:

在 Java SE 6 中监视和诊断性能问题

 

参考:

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://qa.taobao.com/?p=10010

运用Jconsole监控JVM

http://www.coderanch.com/t/329407/java/java/find-all-loaded-classes-classloaders

转载于:https://www.cnblogs.com/southdom/articles/5001707.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红米k30 android版本,Redmi K30 Pro 推送 MIUI 12.2.1 稳定版:为安卓跨版本升级

今日&#xff0c;Redmi K30 Pro 推送了 MIUI 12.2.1 稳定版内测更新。新系统基于 Android 11 深度定制&#xff0c;更新了 2020 年 10 月谷歌安全补丁。需要注意的是&#xff0c;本次更新为安卓跨版本升级&#xff0c;为降低升级风险&#xff0c;建议提前备份个人数据。同时&am…

三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

三、MySQL子查询学习笔记 7&#xff1a;子查询 含义&#xff1a; 一条查询语句中又嵌套了另一条完整的select语句&#xff0c;其中被嵌套的select语句&#xff0c;称为子查询或内查询&#xff1b;在外面的查询语句&#xff0c;称为主查询或外查询 分类&#xff1a; 一、按子查…

LeetCode 2120. 执行所有后缀指令(模拟)

文章目录1. 题目2. 解题1. 题目 现有一个 n x n 大小的网格&#xff0c;左上角单元格坐标 (0, 0) &#xff0c;右下角单元格坐标 (n - 1, n - 1) 。 给你整数 n 和一个整数数组 startPos &#xff0c;其中 startPos [startrow, startcol] 表示机器人最开始在坐标为 (startrow…

android代理生命周期,了解 Activity 生命周期

当用户浏览、退出和返回到您的应用时&#xff0c;您应用中的在生命周期回调方法中&#xff0c;您可以声明用户离开和再次进入 Activity 时 Activity 的行为方式。例如&#xff0c;如果您正构建流媒体视频播放器&#xff0c;当用户切换至另一应用时&#xff0c;您可能要暂停视频…

Module System of Swift (简析 Swift 的模块系统)

原文地址: http://andelf.github.io/blog/2014/06/19/modules-for-swift/ Swift 中模块是什么&#xff1f;当写下 Swift 中一句 import Cocoa 的时候到底整了个什么玩意&#xff1f;官方 ibook 很含糊只是提了半页不到。 本文解决如下问题 介绍 Swift 中两种可 import 的模块如…

四、MySQL分页查询 + 子查询复习 学习笔记 (复习连接查询相关内容 详解)

8&#xff1a;分页查询 应用场景&#xff1a;当要显示的数据&#xff0c;一页显示不全&#xff0c;需要分页提交sql请求 语法&#xff1a; SELECT 查询列表 FROM 表名 【JOIN type JOIN 表2 ON 连接条件 WHERE 筛选条件 GROUP BY 分组字段 HAVING 分组后的筛选 ORDER BY 排序的…

LeetCode 2121. 相同元素的间隔之和(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。 arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地&#xff0c;arr[i] 和 arr[j] 之间的间隔是 |i - j| 。 返回一个长度为 n 的数组 intervals &#xff0c;其中 interva…

jquery中怎么删除ul中的整个li包括节点

1.$(ul li).remove(); 2.$(ul li).each(function(){ $(this).remove(); }); 3.$("ul").find("li").remove(); 4.$(ul).children().filter(li).remove();转载于:https://www.cnblogs.com/zhujiabin/p/5008006.html

在android添加数据采集,一种基于Android系统的地理信息数据采集方法与流程

本方法属于采集地理信息数据的发明&#xff0c;是一种基于android操作系统和gis地理信息系统进行户外地理信息数据采集的方法。背景技术&#xff1a;众所周知地理信息数据采集在很多行业中都有应用&#xff0c;比如说农业中的土地普查、城市管理中的地下管线普查、工业中的地质…

五、MySQL联合查询学习笔记 + 查询总结(详解)

9、 联合查询 union 联合 合并&#xff1a;将多条查询语句的结果合并成一个结果 语法&#xff1a; 查询语句1 UNION 查询语句2 UNION … 应用场景&#xff1a;要查询的结果来自多个表&#xff0c;且多个表之间没有直接的连接关系&#xff0c;但查询的信息相同 特点&#xff…

LeetCode 2124. 检查是否所有 A 都在 B 之前

文章目录1. 题目2. 解题1. 题目 给你一个 仅 由字符 a 和 b 组成的字符串 s 。 如果字符串中 每个 ‘a’ 都出现在 每个 ‘b’ 之前&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;s "aaabbb" 输出&#x…

设计模式—桥接模式

前言 这里以电视遥控器为例子引出桥接模式&#xff0c;首先每个牌子的电视都有一个遥控器&#xff0c;可以设计吧遥控器作为一个抽象类&#xff0c;抽象类中提供遥控器的所有实现&#xff0c;其他具体电视品牌的遥控器都继承这个抽象类 这样的实现使得每个不同型号的电视都有自…

Android8.1怎么装谷歌,谷歌PixelXL安卓9.0/8.1/8.0/7.X安装面具ROOT方案

免费预览&#xff1a;注意1&#xff1a;请提前备份资料&#xff0c;解锁BL会清空所有数据&#xff01;注意2&#xff1a;请提前移除谷歌账户(设置—账户—你的谷歌账户—移除)全套资料在教程末尾1. 解锁BL在手机开机状态下&#xff0c;启用开发者选项并勾选「允许USB调试」和「…

六、MySQL DML数据操纵语言学习笔记(插入、修改、删除详解 + 强化复习)

DML语言 数据操作语言&#xff1a; 插入&#xff1a;insert修改&#xff1a;update删除&#xff1a;delete 一、插入语句 &#xff08;1&#xff09;方式一&#xff1a;经典的插入方式 语法&#xff1a; insert into 表名&#xff08;列名&#xff0c;…&#xff09;values…

LeetCode 2125. 银行中的激光束数量

文章目录1. 题目2. 解题1. 题目 银行内部的防盗安全装置已经激活。 给你一个下标从 0 开始的二进制字符串数组 bank &#xff0c;表示银行的平面图&#xff0c;这是一个大小为 m x n 的二维矩阵。 bank[i] 表示第 i 行的设备分布&#xff0c;由若干 ‘0’ 和若干 ‘1’ 组成。…

2-Second Scrum Meeting-20151202

任务安排 闫昊&#xff1a; 今日完成&#xff1a;设计学习进度的管理。 明日任务&#xff1a;请假。&#xff08;编译计组&#xff0c;压力有点大&#xff09; 金哉仁&#xff1a; 今日完成&#xff1a;继续商讨APP相关界面与设计&#xff0c;安装AndroidStudio。 明日任务&…

android查询所有照片,Android查询外部存储中所有照片

最近写了个自定义相册模块&#xff0c;其中比较核心的算是查询照片了&#xff0c;直接上代码吧val contentUri MediaStore.Files.getContentUri("external")val sortOrder MediaStore.Files.FileColumns.DATE_MODIFIED " DESC"val selection "(${M…

七、MySQL DDL数据定义语言 学习笔记(库和表的创建、修改、删除详解 + 强化复习)

DDL语言 数据定义语言 库和表的管理&#xff1a; 一、库的管理: 创建、修改、删除 二、表的管理: 创建、修改、删除 创建&#xff1a; create 修改&#xff1a; alter 删除&#xff1a; drop 一、库的管理 1、库的创建: 语法&#xff1a; create database [if not exists…

LeetCode 2126. 摧毁小行星(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个整数 mass &#xff0c;它表示一颗行星的初始质量。 再给你一个整数数组 asteroids &#xff0c;其中 asteroids[i] 是第 i 颗小行星的质量。 你可以按 任意顺序 重新安排小行星的顺序&#xff0c;然后让行星跟它们发生碰撞。如果行星…

bzoj:2018 [Usaco2009 Nov]农场技艺大赛

Description Input 第1行&#xff1a;10个空格分开的整数: N, a, b, c, d, e, f, g, h, M Output 第1行&#xff1a;满足总重量最轻&#xff0c;且用度之和最大的N头奶牛的总体重模M后的余数。 Sample Input 2 0 1 5 55555555 0 1 0 55555555 55555555Sample Output 51HINT 样例…