JVM系列五:JVM监测&工具
来源:互联网 发布:php 数组函数 编辑:程序博客网 时间:2024/05/17 17:16
需要监测的数据:(内存使用情况 谁使用了内存 GC的状况)
内存使用情况--heap&PermGen
@ 表示通过jmap –heap pid 可以获取的值
# 表示通过jstat –gcutil pid 可以获取的值
参数的查看可以通过多种方法 本文中只随机列出一种。
描述最大值当前值报警值堆内存@Heap Configuration::MaxHeapSizesum(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 pidMinHeapFreeRatio@Heap Configuration::MinHeapFreeRatioMaxHeapFreeRatio@Heap Configuration::MaxHeapFreeRationew gen gc@using … in the new generationold 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>
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
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 option:Class Loader Statistics
-compiler:HotSpot Just-In-Time Compiler Statistics
-gc Option:Garbage-collected heap statistics
-gccapacity Option:Memory Pool Generation and Space Capacities
-gccause Option:Garbage Collection Statistics, Including GC Events
GCCCause of current Garbage Collection.
前面的字段与gcutil相同.
-gcnew Option:New Generation Statistics
-gcnewcapacity Option:New Generation Space Size Statistics
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
-gcoldcapacity Option:Old Generation Statistics
-gcpermcapacity Option: Permanent Generation Statistics
-gcutil Option:Summary of Garbage Collection Statistics
-printcompilation Option: HotSpot Compiler Method Statistics
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 {demo2:自定义Mbean Type,记录的数据可通过jconsole等工具或自写代码查看,
public static void main( String[] args ) throws Exception {
ClassLoadingMXBean bean = ManagementFactory.getClassLoadingMXBean();
System.out.println( bean.getLoadedClassCount() );
}
}
//工具方法
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
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- JVM系列五:JVM监测&工具[整理中]
- 《Effective C++》35:考虑virtual函数以外的其他选择
- glDepthFunc
- spark&hbase integration
- 同时跑两个TOMCAT
- Android View的事件分发机制(一):View
- JVM系列五:JVM监测&工具
- iOS开发之Bug汇总
- 一个IC卡数据准备tags解析器
- Redis系列-存储篇hash主要操作函数小结
- IO和NIO
- 引用sun.management.ManagementFactory出错的解决办法
- Android之Handler用法总结
- CentOS 安装和配置OpenVPN
- 几道数学问题 (未完成)