JVM系列五:JVM监测&工具
2014-05-05 16:53
204 查看
JVM系列五:JVM监测&工具[整理中]
/article/5834923.html前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案。正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并不断进行调整才能找到最佳设置方案。本文将介绍如果通过工具及Javaapi来监测JVM的运行状态,并详细介绍各工具的使用方法。
需要监测的数据:(内存使用情况谁使用了内存GC的状况)
内存使用情况--heap&PermGen
@表示通过jmap–heappid可以获取的值
#表示通过jstat–gcutilpid可以获取的值
参数的查看可以通过多种方法本文中只随机列出一种。
描述 | 最大值 | 当前值 | 报警值 |
堆内存 | @HeapConfiguration::MaxHeapSize sum(eden+servivor+old) | sum(eden+servivor+old) | 自设 |
非堆内存 | sum(perm+native) | 无 | |
Eden | @EdenSpace::capacity | @EdenSpace::used | 无 |
Survivor0 | @FromSpace::capacity | @FromSpace::used | 无 |
Survivor1 | @ToSpace::capacity | @ToSpace::used | 无 |
Newgen (注意区别于 | @NewGeneration::capacity Eden+1SurvivorSpace | @NewGeneration::used | 无 |
Oldgen | @concurrentmark-sweepgeneration::capacity (CMS是对old区的gc,所以此处即表示oldgen) | @concurrentmark-sweepgeneration::capacity(CMS)::used | 自设 |
PermGen | @PermGeneration::capacity | @PermGeneration::used | 自设 |
描述 | 配置值 |
MaxTenuringThreshold | jinfo-flagMaxTenuringThresholdpid |
MinHeapFreeRatio | @HeapConfiguration::MinHeapFreeRatio |
MaxHeapFreeRatio | @HeapConfiguration::MaxHeapFreeRatio |
newgengc | @using…inthenewgeneration |
oldgengc | newgengc声明下方 |
类总数统计 | ?? |
toporpsaux
谁使用了内存
Heap
jmap–histo
jmap–dump,thenmat
Cheap
googleperftools
GC的状况
描述 | 收集次数 | 收集时间 | 应用暂停时间 |
FullGC | #FGC | #FGCT | |
YoungGC | #YGC | #YGCT | 同上 |
常用
可以从一个给定的java进程或core文件或远程debug服务器上获取java配置信息。包括java系统属性及JVM参数(commandlineflags)。注意在jvm启动参数中没有配置的参数也可使用jinfo–flagxxxpid输出默认值(很有用,但貌似一些简写的参数查不出来)。
可以修改运行时的java进程的opts。
只有solaris和linux的JDK版本里有。
使用方式可使用jinfo–h查询。
观察运行中的jvm物理内存的占用情况。
如果连用SHELLjmap-histopid>a.log可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。
参数很简单,直接查看jmap-h
举例:
jmap-heappid
jmap-dump:format=b,file=heap.hprof<pid>
dump文件可以通过MemoryAnalyzer分析查看.网址:
观察jvm中当前所有线程的运行情况和线程当前状态
如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的javastack和nativestack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的javastack和nativestack的信息,如果现在运行的java程序呈现hung的状态,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
参数很简单,直接查看jstack-h
举例:
jstackpid
JVM监测工具(JavaVirtualMachineStatisticsMonitoringTool)。利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括各种堆和非堆的大小及其内存使用量、classloader、compiler、垃圾回收状况等。
举例:
jstat–printcompilation-h103024250600
每250毫秒打印一次,一共打印600次每隔10行显示一次head
语法结构:
[code]Usage:jstat-help|-options jstat-<option>[-t][-h<lines>]<vmid>[<interval>[<count>]]
[/code]
参数介绍:
-hn每隔几行输出标题
vmidVM的进程号,即当前运行的java进程号
-t在第一列显示自JVM启动以来的时间戳
-J修改java进程的参数。类似jinfo-flag<name>=<value>。例如-J-Xms48m设置初始堆为48M。
-optionoption为要检测的参数。参数列表可通过jstat–options获取。下面将分别介绍每个参数及输出字段的含义。
统计classloader行为信息 | |
统计编译行为信息 | |
统计jdkgc时heap信息 | |
统计堆内存不同代的heap容量信息 | |
统计gc的情况(同-gcutil)和引起gc的事件 | |
统计gc时新生代的信息(相比gcutil更详细) | |
统计gc时新生代heap容量 | |
统计gc时,老年区的情况 | |
统计gc时,老年区heap容量 | |
统计gc时,permanent区heap容量 | |
统计gc时,heap情况 | |
统计编译行为信息 |
Column | Description |
---|---|
Loaded | Numberofclassesloaded. |
Bytes | NumberofKbytesloaded. |
Unloaded | Numberofclassesunloaded. |
Bytes | NumberofKbytesunloaded. |
Time | Timespentperformingclassloadandunloadoperations. |
Column | Description |
---|---|
Compiled | Numberofcompilationtasksperformed. |
Failed | Numberofcompilationtasksthatfailed. |
Invalid | Numberofcompilationtasksthatwereinvalidated. |
Time | Timespentperformingcompilationtasks. |
FailedType | Compiletypeofthelastfailedcompilation. |
FailedMethod | Classnameandmethodforthelastfailedcompilation. |
Column | Description |
---|---|
S0C | Currentsurvivorspace0capacity(KB). |
S1C | Currentsurvivorspace1capacity(KB). |
S0U | Survivorspace0utilization(KB). |
S1U | Survivorspace1utilization(KB). |
EC | Currentedenspacecapacity(KB). |
EU | Edenspaceutilization(KB). |
OC | Currentoldspacecapacity(KB). |
OU | Oldspaceutilization(KB). |
PC | Currentpermanentspacecapacity(KB). |
PU | Permanentspaceutilization(KB). |
YGC | NumberofyounggenerationGCEvents. |
YGCT | Younggenerationgarbagecollectiontime. |
FGC | NumberoffullGCevents. |
FGCT | Fullgarbagecollectiontime. |
GCT | Totalgarbagecollectiontime. |
Column | Description |
---|---|
NGCMN | Minimumnewgenerationcapacity(KB). |
NGCMX | Maximumnewgenerationcapacity(KB). |
NGC | Currentnewgenerationcapacity(KB). |
S0C | Currentsurvivorspace0capacity(KB). |
S1C | Currentsurvivorspace1capacity(KB). |
EC | Currentedenspacecapacity(KB). |
OGCMN | Minimumoldgenerationcapacity(KB). |
OGCMX | Maximumoldgenerationcapacity(KB). |
OGC | Currentoldgenerationcapacity(KB). |
OC | Currentoldspacecapacity(KB). |
PGCMN | Minimumpermanentgenerationcapacity(KB). |
PGCMX | MaximumPermanentgenerationcapacity(KB). |
PGC | CurrentPermanentgenerationcapacity(KB). |
PC | CurrentPermanentspacecapacity(KB). |
YGC | NumberofYounggenerationGCEvents. |
FGC | NumberofFullGCEvents. |
Column | Description |
---|---|
LGCC | CauseoflastGarbageCollection. |
GCC | CauseofcurrentGarbageCollection. |
-gcnewOption:NewGenerationStatistics
Column | Description |
---|---|
S0C | Currentsurvivorspace0capacity(KB). |
S1C | Currentsurvivorspace1capacity(KB). |
S0U | Survivorspace0utilization(KB). |
S1U | Survivorspace1utilization(KB). |
TT | Tenuringthreshold. |
MTT | Maximumtenuringthreshold. |
DSS | Desiredsurvivorsize(KB). |
EC | Currentedenspacecapacity(KB). |
EU | Edenspaceutilization(KB). |
YGC | NumberofyounggenerationGCevents. |
YGCT | Younggenerationgarbagecollectiontime. |
Column | Description |
---|---|
NGCMN | Minimumnewgenerationcapacity(KB). |
NGCMX | Maximumnewgenerationcapacity(KB). |
NGC | Currentnewgenerationcapacity(KB). |
S0CMX | Maximumsurvivorspace0capacity(KB). |
S0C | Currentsurvivorspace0capacity(KB). |
S1CMX | Maximumsurvivorspace1capacity(KB). |
S1C | Currentsurvivorspace1capacity(KB). |
ECMX | Maximumedenspacecapacity(KB). |
EC | Currentedenspacecapacity(KB). |
YGC | NumberofyounggenerationGCevents. |
FGC | NumberofFullGCEvents. |
Column | Description |
---|---|
PC | Currentpermanentspacecapacity(KB). |
PU | Permanentspaceutilization(KB). |
OC | Currentoldspacecapacity(KB). |
OU | oldspaceutilization(KB). |
YGC | NumberofyounggenerationGCevents. |
FGC | NumberoffullGCevents. |
FGCT | Fullgarbagecollectiontime. |
GCT | Totalgarbagecollectiontime. |
Column | Description |
---|---|
OGCMN | Minimumoldgenerationcapacity(KB). |
OGCMX | Maximumoldgenerationcapacity(KB). |
OGC | Currentoldgenerationcapacity(KB). |
OC | Currentoldspacecapacity(KB). |
YGC | NumberofyounggenerationGCevents. |
FGC | NumberoffullGCevents. |
FGCT | Fullgarbagecollectiontime. |
GCT | Totalgarbagecollectiontime. |
Column | Description |
---|---|
PGCMN | Minimumpermanentgenerationcapacity(KB). |
PGCMX | Maximumpermanentgenerationcapacity(KB). |
PGC | Currentpermanentgenerationcapacity(KB). |
PC | Currentpermanentspacecapacity(KB). |
YGC | NumberofyounggenerationGCevents. |
FGC | NumberoffullGCevents. |
FGCT | Fullgarbagecollectiontime. |
GCT | Totalgarbagecollectiontime. |
Column | Description |
---|---|
S0 | Survivorspace0utilizationasapercentageofthespace'scurrentcapacity. |
S1 | Survivorspace1utilizationasapercentageofthespace'scurrentcapacity. |
E | Edenspaceutilizationasapercentageofthespace'scurrentcapacity. |
O | Oldspaceutilizationasapercentageofthespace'scurrentcapacity. |
P | Permanentspaceutilizationasapercentageofthespace'scurrentcapacity. |
YGC | NumberofyounggenerationGCevents. |
YGCT | Younggenerationgarbagecollectiontime. |
FGC | NumberoffullGCevents. |
FGCT | Fullgarbagecollectiontime. |
GCT | Totalgarbagecollectiontime. |
Column | Description |
---|---|
Compiled | Numberofcompilationtasksperformed. |
Size | Numberofbytesofbytecodeforthemethod. |
Type | Compilationtype. |
Method | Classnameandmethodnameidentifyingthecompiledmethod.Classnameuses"/"insteadof"."asnamespaceseparator.Methodnameisthemethodwithinthegivenclass.TheformatforthesetwofieldsisconsistentwiththeHotSpot-XX:+PrintComplationoption. |
jre中提供了一些查看运行中的
可以通过此api访问到运行中的jvm的类加载的信息、jit编译器的信息、内存分配的情况、线程的相关信息以及运行jvm的操作系统的信息。java.lang.management包中提供了9个接口来访问这些信息,使用ManagementFactory的静态get方法可以获得相应接口的实例,可以通过这些实例来获取你需要的相关信息。
更详细的关于MBean的介绍参见
demo1:查看一下当前运行的jvm中加载了多少个类。想详细了解如何使用这些api,可以参考java.lang.management包中的详细api文档。
[code]publicclassClassLoaderChecker{ publicstaticvoidmain(String[]args)throwsException{ ClassLoadingMXBeanbean=ManagementFactory.getClassLoadingMXBean(); System.out.println(bean.getLoadedClassCount()); } }
demo2:自定义MbeanType,记录的数据可通过jconsole等工具或自写代码查看,[/code]
//工具方法
publicstaticObjectNameregister(Stringname,Objectmbean){
try{
ObjectNameobjectName=newObjectName(name);
MBeanServermbeanServer=ManagementFactory
.getPlatformMBeanServer();
try{
mbeanServer.registerMBean(mbean,objectName);
}catch(InstanceAlreadyExistsExceptionex){
mbeanServer.unregisterMBean(objectName);
mbeanServer.registerMBean(mbean,objectName);
}
returnobjectName;
}catch(JMExceptione){
thrownewIllegalArgumentException(name,e);
}
}
//步骤一:定义Mbean接口:
//随便定义
publicinterfaceDemoMBean{
publicAtomicLonggetInvokeCount();
}
//步骤二:实现接口,并注册:
publicclassDemoImplimplementsDemoMBean{
publicfinalstaticStringDEFAULT_OBJECT_NAME_PREFIX="com.redcreen.demo:type=demo";
register("com.redcreen.demo:type=demo",DemoImpl.instance);
}
//可以通过jconsole中查看数据了
相关推荐文章:
参考:
相关文章推荐
- 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监测&工具[整理中]
- JVM系列五:JVM监测&工具
- JVM系列五:JVM监测&工具[整理中]