Class ThreadHistoryMonitorHelper
java.lang.Object
org.jboss.byteman.rule.helper.Helper
org.jboss.byteman.sample.helper.ThreadHistoryMonitorHelper
- All Implemented Interfaces:
ThreadHistoryMonitorHelperMXBean
Helper class used by ThreadHistoryMonitorHelper script to trace thread operations. This is essentially an extension of the ThreadMonitorHelper which uses maps to store the thread history rather than writing it out.
The helper also implements ThreadHistoryMonitorHelperMXBean to allow this class to be registered as an mbean @see #registerHelperMBean(String).
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final Queue<ThreadMonitorEvent> private static final Queue<ThreadMonitorEvent> private static booleanorg.jboss.byteman.sample.helper.debug system property debug mode flagprivate static final Queue<ThreadMonitorEvent> private static ThreadHistoryMonitorHelperThe first instance of ThreadHistoryMonitorHelper that will be used as the mbean byregisterHelperMBean(String).private static final Queue<ThreadMonitorEvent> private static final Map<ThreadMonitored, ThreadMonitored> private static final Queue<ThreadMonitorEvent> private static final Queue<ThreadMonitorEvent> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidLooks to the org.jboss.byteman.sample.helper.debug system property to set the class DEBUG mode flag.private voiddoWriteAllEvents(String path) Get the array of thread creation events.Get a string description of all thread events.Get the array of thread exit events.private ThreadMonitoredgetMonitoredThread(Thread thread) Returning monitored thread belonging to the provided thread object.Get the array of Runnable.run events.Get the array of thread start events.private Map<ThreadMonitored, ThreadMonitorEvent> getThreadEventMap(Iterable<ThreadMonitorEvent> events) static voidnewThreadEvent(ThreadMonitored threadMonitored, Thread thread, ThreadMonitorEventType eventType) Common ThreadMonitorEvent creation method.voidregisterHelperMBean(String name) Register the INSTANCE as an mbean under the given name.voidtraceCreate(Thread thread, int depth) trace creation of the supplied thread to System.out this should only be triggered from theThreadconstructorvoidtrace exit of the supplied thread to System.out this should only be triggered from the call toThreadexit methodvoidtraceInterrupt(Thread thread) trace interrupted of the supplied thread to System.out this should only be triggered from the call toThread.interrupt()voidtrace run of the supplied Runnable to System.out this should only be triggered from a call to an implementation ofRunnable.run()voidtrace run of the supplied Callable to System.out this should only be triggered from a call to an implementation ofCallable.call()voidtraceStart(Thread thread) trace start of the supplied thread to System.out this should only be triggered from the call to java.lang.Thread.start"voidwriteAllEventsToFile(String path) Write all events to the file given by pathvoidwriteAllEventsToFile(String path, int sampleCount) Write all events to the file given by path, repeating sampleCount times at 5 second intervals.voidwriteEventsToFile(String type, String path) Write a report of all events of the indicated type to the given path.private voidwriteFullEvents(Formatter fw, String title, Collection<ThreadMonitorEvent> events) private voidwriteThreadNames(Formatter fw, String title, Collection<ThreadMonitorEvent> events) Methods inherited from class Helper
addCountDown, callerCheck, callerEquals, callerEquals, callerEquals, callerEquals, callerEquals, callerEquals, callerEquals, callerEquals, callerEquals, callerMatches, callerMatches, callerMatches, callerMatches, callerMatches, callerMatches, callerMatches, callerMatches, callerMatches, clear, clearLinks, clearLinks, closeTrace, countDown, createCountDown, createCounter, createCounter, createJoin, createLinkMap, createRendezvous, createRendezvous, createTimer, deactivated, debug, decrementCounter, delay, deleteCounter, deleteLinkMap, deleteRendezvous, deleteTimer, err, errTraceException, flag, flagged, formatAllStacks, formatAllStacks, formatAllStacks, formatAllStacks, formatStack, formatStack, formatStack, formatStack, formatStackBetween, formatStackBetween, formatStackBetween, formatStackBetween, formatStackBetween, formatStackBetween, formatStackBetweenMatches, formatStackBetweenMatches, formatStackBetweenMatches, formatStackBetweenMatches, formatStackBetweenMatches, formatStackBetweenMatches, formatStackMatching, formatStackMatching, formatStackMatching, formatStackMatching, formatStackMatching, formatStackMatching, formatStackRange, formatThreadStack, formatThreadStack, formatThreadStack, formatThreadStack, getCountDown, getElapsedTimeFromTimer, getObjectSize, getRendezvous, getStack, incrementCounter, incrementCounter, isCountDown, isJoin, isRendezvous, joinEnlist, joinWait, joinWait, killJVM, killJVM, killThread, link, link, linked, linked, linkNames, linkNames, linkValues, linkValues, matchIndex, noisy, noisyTraceException, openTrace, openTrace, out, outTraceException, printFrame, printlnFrame, readCounter, readCounter, rendezvous, rendezvous, resetTimer, setTriggering, signalKill, signalKill, signalThrow, signalThrow, signalWake, signalWake, toString, trace, trace, traceAllStacks, traceAllStacks, traceAllStacks, traceAllStacks, traceAllStacks, traceAllStacks, traceClose, traceln, traceln, traceOpen, traceOpen, traceStack, traceStack, traceStack, traceStack, traceStack, traceStack, traceStackBetween, traceStackBetween, traceStackBetween, traceStackBetween, traceStackBetween, traceStackBetween, traceStackBetween, traceStackBetween, traceStackBetween, traceStackBetweenMatches, traceStackBetweenMatches, traceStackBetweenMatches, traceStackBetweenMatches, traceStackBetweenMatches, traceStackBetweenMatches, traceStackBetweenMatches, traceStackBetweenMatches, traceStackBetweenMatches, traceStackMatching, traceStackMatching, traceStackMatching, traceStackMatching, traceStackMatching, traceStackMatching, traceStackMatching, traceStackMatching, traceStackMatching, traceStackRange, traceThreadStack, traceThreadStack, traceThreadStack, traceThreadStack, traceThreadStack, traceThreadStack, triggerIndex, uninstalled, unlink, unlink, verbose, verboseTraceException, waitFor, waitFor, waiting
-
Field Details
-
monitoredThreads
-
createList
-
startList
-
exitList
-
runList
-
callList
-
interruptedList
-
INSTANCE
The first instance of ThreadHistoryMonitorHelper that will be used as the mbean byregisterHelperMBean(String). -
DEBUG
private static boolean DEBUGorg.jboss.byteman.sample.helper.debug system property debug mode flag
-
-
Constructor Details
-
ThreadHistoryMonitorHelper
-
-
Method Details
-
activated
public static void activated()Looks to the org.jboss.byteman.sample.helper.debug system property to set the class DEBUG mode flag. -
installed
-
registerHelperMBean
Register the INSTANCE as an mbean under the given name.- Parameters:
name- - the object name string to register the INSTANCE under
-
traceCreate
-
traceStart
trace start of the supplied thread to System.out this should only be triggered from the call to java.lang.Thread.start"- Parameters:
thread- the newly starting thread
-
traceExit
-
traceInterrupt
trace interrupted of the supplied thread to System.out this should only be triggered from the call toThread.interrupt()- Parameters:
thread- the interrupting thread
-
traceRun
trace run of the supplied Runnable to System.out this should only be triggered from a call to an implementation ofRunnable.run()- Parameters:
runnable- the runnable being run
-
traceRun
trace run of the supplied Callable to System.out this should only be triggered from a call to an implementation ofCallable.call()- Parameters:
callable- the callable being call
-
getCreateEvents
Description copied from interface:ThreadHistoryMonitorHelperMXBeanGet the array of thread creation events.- Specified by:
getCreateEventsin interfaceThreadHistoryMonitorHelperMXBean- Returns:
- the array of thread creation events in the order of occurrence.
-
getStartEvents
Description copied from interface:ThreadHistoryMonitorHelperMXBeanGet the array of thread start events.- Specified by:
getStartEventsin interfaceThreadHistoryMonitorHelperMXBean- Returns:
- the array of thread start events in the order of occurrence.
-
getExitEvents
Description copied from interface:ThreadHistoryMonitorHelperMXBeanGet the array of thread exit events.- Specified by:
getExitEventsin interfaceThreadHistoryMonitorHelperMXBean- Returns:
- the array of thread exit events in the order of occurrence.
-
getRunEvents
Description copied from interface:ThreadHistoryMonitorHelperMXBeanGet the array of Runnable.run events.- Specified by:
getRunEventsin interfaceThreadHistoryMonitorHelperMXBean- Returns:
- the array of Runnable.run events in the order of occurrence.
-
getCallEvents
-
getEventReport
Description copied from interface:ThreadHistoryMonitorHelperMXBeanGet a string description of all thread events. This is the same event information written byThreadHistoryMonitorHelperMXBean.writeAllEventsToFile(String).- Specified by:
getEventReportin interfaceThreadHistoryMonitorHelperMXBean- Returns:
- a formatted text description of all thread events.
- Throws:
IOException- if an io error occurs
-
writeEventsToFile
Description copied from interface:ThreadHistoryMonitorHelperMXBeanWrite a report of all events of the indicated type to the given path.- Specified by:
writeEventsToFilein interfaceThreadHistoryMonitorHelperMXBean- Parameters:
type- - one of create, start, exit, run; case insensitivepath- - the pathname of the file to write the event report to.- Throws:
IOException- if an io error occurs
-
writeAllEventsToFile
Write all events to the file given by path- Specified by:
writeAllEventsToFilein interfaceThreadHistoryMonitorHelperMXBean- Parameters:
path- path to file- Throws:
IOException- if an io error occurs
-
writeAllEventsToFile
Write all events to the file given by path, repeating sampleCount times at 5 second intervals. The actual filename of each sample report will be either path-n where n = [0,sampleCount] if path does not contain a suffix, for example: /tmp/report-0 /tmp/report-1 /tmp/report-3 or pathbase-n.suffix if there is a '.' delimited suffix (.txt), for example: /tmp/report-0.txt /tmp/report-1.txt /tmp/report-3.txt- Parameters:
path- - the path to the event report filesampleCount- - the number of samples to take- Throws:
IOException- - thrown on any IO failure
-
doWriteAllEvents
- Throws:
IOException
-
writeFullEvents
-
writeThreadNames
-
newThreadEvent
public ThreadMonitorEvent newThreadEvent(ThreadMonitored threadMonitored, Thread thread, ThreadMonitorEventType eventType) Common ThreadMonitorEvent creation method.- Parameters:
thread- - the thread associated with the eventeventType- - the type of the event.- Returns:
- the ThreadMonitorEvent instance for the event.
-
getMonitoredThread
Returning monitored thread belonging to the provided thread object. If such monitored thread does not exist (is not known toThreadHistoryMonitorHelper) then brand newThreadMonitoredobject is created and is added to the list checked by the helper class.- Parameters:
thread- thread that belonging ThreadMonitorThread is search for- Returns:
- ThreadMonitorThread which belongs to provided thread or null in no such known
-
getThreadEventMap
private Map<ThreadMonitored, ThreadMonitorEvent> getThreadEventMap(Iterable<ThreadMonitorEvent> events)
-