358N/A<?
xml version="1.0" encoding="utf-8"?>
358N/A Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. 358N/A DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 358N/A This code is free software; you can redistribute it and/or modify it 358N/A under the terms of the GNU General Public License version 2 only, as 358N/A published by the Free Software Foundation. 358N/A This code is distributed in the hope that it will be useful, but WITHOUT 358N/A ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 358N/A FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 358N/A version 2 for more details (a copy is included in the LICENSE file that 358N/A accompanied this code). 358N/A You should have received a copy of the GNU General Public License version 358N/A 2 along with this work; if not, write to the Free Software Foundation, 358N/A Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 553N/A Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA <
relation_decl id="GC_ID" uri="vm/gc/id"/>
Events in the JVM are by default timed (it's more common) Perhaps a little strange. Might change. Declard with the 'event' tag. <value fields> can be one or more of value - a simple primitive or constant type value structvalue - value is a sub-struct. This type must be previously defined All these require you to declare type, field and label of the field. They also accept an optional description of the field. If the meaning of the field is not obvious from the label you should provide a description. If an event however is not actually meant for end-users, you should probably _not_ write descriptions at all, since you might just add more concepts the user has no notion of/interest in. Events should be modeled after what conceptual process you are expressing, _NOT_ from whatever data structures you might use inside the JVM for expressing a process. Declared with the 'struct' tag. Declares a structure type that can be used in other events. has_thread="true" is_instant="true">
<
value type="JAVALANGTHREAD" field="javalangthread" label="Java Thread"/>
has_thread="true" is_instant="true">
<
value type="JAVALANGTHREAD" field="javalangthread" label="Java Thread"/>
has_thread="true" has_stacktrace="true" is_instant="false">
<
value type="MILLIS" field="time" label="Sleep Time"/>
has_thread="true" has_stacktrace="true" is_instant="false">
<
value type="CLASS" field="klass" label="Class Parked On"/>
<
value type="MILLIS" field="timeout" label="Park Timeout"/>
<
value type="ADDRESS" field="address" label="Address of Object Parked" relation="JAVA_MONITOR_ADDRESS"/>
has_thread="true" has_stacktrace="true" is_instant="false">
<
value type="CLASS" field="klass" label="Monitor Class"/>
<
value type="JAVALANGTHREAD" field="previousOwner" label="Previous Monitor Owner"/>
<
value type="ADDRESS" field="address" label="Monitor Address" relation="JAVA_MONITOR_ADDRESS"/>
<
event id="JavaMonitorWait" path="java/monitor_wait" label="Java Monitor Wait" description="Waiting on a Java monitor" has_thread="true" has_stacktrace="true" is_instant="false">
<
value type="CLASS" field="klass" label="Monitor Class" description="Class of object waited on"/>
<
value type="OSTHREAD" field="notifier" label="Notifier Thread" description="Notifying Thread"/>
<
value type="MILLIS" field="timeout" label="Timeout" description="Maximum wait time"/>
<
value type="BOOLEAN" field="timedOut" label="Timed Out" description="Wait has been timed out"/>
<
value type="ADDRESS" field="address" label="Monitor Address" description="Address of object waited on" relation="JAVA_MONITOR_ADDRESS"/>
<
struct id="VirtualSpace">
<
value type="ADDRESS" field="start" label="Start Address" description="Start address of the virtual space" />
<
value type="ADDRESS" field="committedEnd" label="Committed End Address" description="End address of the committed memory for the virtual space" />
<
value type="BYTES64" field="committedSize" label="Committed Size" description="Size of the committed memory for the virtual space" />
<
value type="ADDRESS" field="reservedEnd" label="Reserved End Address" description="End address of the reserved memory for the virtual space" />
<
value type="BYTES64" field="reservedSize" label="Reserved Size" description="Size of the reserved memory for the virtual space" />
<
struct id="ObjectSpace">
<
value type="ADDRESS" field="start" label="Start Address" description="Start address of the space" />
<
value type="ADDRESS" field="end" label="End Address" description="End address of the space" />
<
value type="BYTES64" field="used" label="Used" description="Bytes allocated by objects in the space" />
<
value type="BYTES64" field="size" label="Size" description="Size of the space" />
<
event id="GCHeapSummary" path="vm/gc/heap/summary" label="Heap Summary" is_instant="true">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="GCWHEN" field="when" label="When" />
<
structvalue type="VirtualSpace" field="heapSpace" label="Heap Space"/>
<
value type="BYTES64" field="heapUsed" label="Heap Used" description="Bytes allocated by objects in the heap"/>
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="GCWHEN" field="when" label="When" />
<
structvalue type="VirtualSpace" field="permSpace" label="PermGen Space"/>
<
structvalue type="ObjectSpace" field="objectSpace" label="Object Space"/>
<
event id="PSHeapSummary" path="vm/gc/heap/ps_summary" label="ParallelScavengeHeap Summary" is_instant="true">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="GCWHEN" field="when" label="When" />
<
structvalue type="VirtualSpace" field="oldSpace" label="Old Space"/>
<
structvalue type="ObjectSpace" field="oldObjectSpace" label="Old Object Space"/>
<
structvalue type="VirtualSpace" field="youngSpace" label="Young Space"/>
<
structvalue type="ObjectSpace" field="edenSpace" label="Eden Space"/>
<
structvalue type="ObjectSpace" field="fromSpace" label="From Space"/>
<
structvalue type="ObjectSpace" field="toSpace" label="To Space"/>
description="Garbage collection performed by the JVM">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID" />
<
value type="GCNAME" field="name" label="Name" description="The name of the Garbage Collector" />
<
value type="GCCAUSE" field="cause" label="Cause" description="The reason for triggering this Garbage Collection" />
<
value type="RELATIVE_TICKS" field="sumOfPauses" label="Sum of Pauses" description="Sum of all the times in which Java execution was paused during the garbage collection" />
<
value type="RELATIVE_TICKS" field="longestPause" label="Longest Pause" description="Longest individual pause during the garbage collection" />
description="Extra information specific to Parallel Old Garbage Collections">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID" />
<
value type="ADDRESS" field="densePrefix" label="Dense Prefix" description="The address of the dense prefix, used when compacting" />
description="Extra information specific to Young Garbage Collections">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID" />
<
value type="UINT" field="tenuringThreshold" label="Tenuring Threshold" />
description="Extra information specific to Old Garbage Collections">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
description="Extra information specific to G1 Garbage Collections">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="G1YCTYPE" field="type" label="Type" />
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="UINT" field="cSetRegions" label="Collection Set Regions"/>
<
value type="BYTES64" field="cSetUsedBefore" label="Collection Set Before" description="Memory usage before GC in the collection set regions"/>
<
value type="BYTES64" field="cSetUsedAfter" label="Collection Set After" description="Memory usage after GC in the collection set regions"/>
<
value type="UINT" field="allocationRegions" label="Allocation Regions" description="Regions chosen as allocation regions during evacuation (includes survivors and old space regions)"/>
<
value type="BYTES64" field="allocRegionsUsedBefore" label="Alloc Regions Before" description="Memory usage before GC in allocation regions"/>
<
value type="BYTES64" field="allocRegionsUsedAfter" label="Alloc Regions After" description="Memory usage after GC in allocation regions"/>
<
value type="BYTES64" field="bytesCopied" label="BytesCopied"/>
<
value type="UINT" field="regionsFreed" label="Regions Freed"/>
label="GC Reference Processing" is_instant="true" description="Total count of processed references during GC">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="REFERENCETYPE" field="type" label="Type" />
<
value type="ULONG" field="count" label="Total Count" />
<
value type="ULONG" field="objectCount" label="Object Count"/>
<
value type="BYTES64" field="firstSize" label="First Failed Object Size"/>
<
value type="BYTES64" field="smallestSize" label="Smallest Failed Object Size"/>
<
value type="BYTES64" field="totalSize" label="Total Object Size"/>
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID" />
<
value type="CLASS" field="class" label="Class" />
<
value type="LONG" field="count" label="Count" />
<
value type="BYTES64" field="totalSize" label="Total Size" />
description="Promotion of an object failed">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
structvalue type="CopyFailed" field="data" label="data"/>
<
value type="OSTHREAD" field="thread" label="Running thread"/>
description="Evacuation of an object failed">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
structvalue type="CopyFailed" field="data" label="data"/>
is_instant="true" description="Concurrent Mode failed">
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="UTF8" field="name" label="Name" />
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="UTF8" field="name" label="Name" />
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="UTF8" field="name" label="Name" />
<
value type="ULONG" field="gcId" label="GC ID" relation="GC_ID"/>
<
value type="UTF8" field="name" label="Name" />
has_thread="true" is_requestable="false" is_constant="false">
<
value type="METHOD" field="method" label="Java Method"/>
<
value type="INTEGER" field="compileID" label="Compilation ID" relation="COMP_ID"/>
<
value type="USHORT" field="compileLevel" label="Compilation Level"/>
<
value type="BOOLEAN" field="succeded" label="Succeeded"/>
<
value type="BOOLEAN" field="isOsr" label="On Stack Replacement"/>
<
value type="BYTES" field="codeSize" label="Compiled Code Size"/>
<
value type="BYTES" field="inlinedBytes" label="Inlined Code Size"/>
has_thread="true" is_requestable="false" is_constant="false">
<
value type="COMPILERPHASETYPE" field="phase" label="Compile Phase"/>
<
value type="INTEGER" field="compileID" label="Compilation ID" relation="COMP_ID"/>
<
value type="USHORT" field="phaseLevel" label="Phase Level"/>
has_thread="true" is_requestable="false" is_constant="false" is_instant="true">
<
value type="UTF8" field="failure" label="Message"/>
<
value type="INTEGER" field="compileID" label="Compilation ID" relation="COMP_ID"/>
<!-- Code sweeper events --> has_thread="true" is_requestable="false" is_constant="false">
<
value type="INTEGER" field="sweepIndex" label="Sweep Index" relation="SWEEP_ID"/>
<
value type="USHORT" field="sweepFractionIndex" label="Fraction Index"/>
<
value type="UINT" field="sweptCount" label="Methods Swept"/>
<
value type="UINT" field="flushedCount" label="Methods Flushed"/>
<
value type="UINT" field="markedCount" label="Methods Reclaim"/>
<
value type="UINT" field="zombifiedCount" label="Methods Zombified"/>
description="Clean code cache from oldest methods" has_thread="true" is_requestable="false" is_constant="false">
<
value type="UINT" field="disconnectedCount" label="Methods Disconnected"/>
<
value type="UINT" field="madeNonEntrantCount" label="Methods Made Non-Entrant"/>
<!-- Code cache events --> has_thread="true" is_requestable="false" is_constant="false" is_instant="true">
<
value type="ADDRESS" field="startAddress" label="Start Address"/>
<
value type="ADDRESS" field="commitedTopAddress" label="Commited Top"/>
<
value type="ADDRESS" field="reservedTopAddress" label="Reserved Top"/>
<
value type="INTEGER" field="entryCount" label="Entries"/>
<
value type="INTEGER" field="methodCount" label="Methods"/>
<
value type="INTEGER" field="adaptorCount" label="Adaptors"/>
<
value type="BYTES64" field="unallocatedCapacity" label="Unallocated"/>
<
value type="BYTES64" field="largestFreeBlock" label="Largest Free Block"/>
<
value type="INTEGER" field="fullCount" label="Full Count"/>
description="Execution of a VM Operation" has_thread="true">
<
value type="VMOPERATIONTYPE" field="operation" label="Operation" />
<
value type="BOOLEAN" field="safepoint" label="At Safepoint" description="If the operation occured at a safepoint."/>
<
value type="BOOLEAN" field="blocking" label="Caller Blocked" description="If the calling thread was blocked until the operation was complete."/>
<
value type="OSTHREAD" field="caller" label="Caller" transition="FROM" description="Thread requesting operation. If non-blocking, will be set to 0 indicating thread is unknown."/>
<!-- Allocation events --> description="Allocation in new Thread Local Allocation Buffer" has_thread="true" has_stacktrace="true" is_instant="true">
<
value type="CLASS" field="class" label="Class" description="Class of allocated object"/>
<
value type="BYTES64" field="allocationSize" label="Allocation Size"/>
<
value type="BYTES64" field="tlabSize" label="TLAB Size"/>
description="Allocation outside Thread Local Allocation Buffers" has_thread="true" has_stacktrace="true" is_instant="true">
<
value type="CLASS" field="class" label="Class" description="Class of allocated object"/>
<
value type="BYTES64" field="allocationSize" label="Allocation Size"/>