Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This page describes all problems, tasks and solution approaches regarding tracing of method invocations in the same thread.

...

  1. How to access information about the current method in a reliable way?

  2. How to associate a called method with it's caller?
  3. How to collect and filter the invocation information without much overhead in on the target application and network?
  4. Can the amount of data form from the agent be reduced? Can it be aggregated?

...

Currently the sequence sensor is implemented as a container, which collects all sensor data (e.g. from timer sensors) starting from an defined start point (execution of a predefined method).
This collected data is chronologically ordered, to allow to trace the invocation sequence.

...

This is not suitable for asynchronous methods.  TODO: Validate if this is the current state of the sequence sensor. Possibly there were improvements in the meantime.


(Also see continues sending in IS advanced notes for better understanding)

New approaches /

...

idea

Idea:

On each hook, the Id of the currentThread would be acquired. So it could be saved when an method was executed by what thread.
(How much overhead would this generate?)


Questions / Possible Problems

  1. Do we have to modify the ClassLoaders and therefore keep them thread safe? 
  2. Do we have to modify Java core classes?
  3.  Which JVM implementations (e.g Sun JVM/ Sun Open JVM/ BEA JRockit/ Kaffe) can Javassist instrument / or can be used on? (Is Javassist really platform independent?)
  4. What , when Javassist does not work on a JVM?
     
  5. How to handle cascaded methods, when some in the middle are not monitored? M1>>M2>>M3>> but M2 not instrumented.
From Braindumb in IS Advanced

Each thread has a unique number (per JVM) automatically assigned.

    • But threads can and - in fact are - reused. For example thread pools do not instantiate new threads, but instead pass different Runnable instances to the existing threads. Each different runnable is itself a different functionality. Thus the thread ID cannot be safely used for identification