Usage

On a regular basis, threads dumps are executed. For each thread, we capture:

  • the state
  • the stack trace
  • the caller (only valid for DS methods hotspots)
  • the lock id (if any)

Over the selected period of time, information is aggregated.

Hotspot Stack trace usage:

  • Top service: the first call in the calls hierarchy containing a relevant package (e.g. com.calypso)
  • Known stack: last call in the calls hierarchy containing a relevant package (e.g. com.calypso)
  • Technical stack: last stack call
  • additional details: in this field are described the entry/output points recorded for this stack
    • entry points are identified by “Frontends”, output points by “Backends
    • Digit: number of times this entry/output points have been recorded in the threads dumps
    • text: description of the entry/output points
    • this field can be extended by moving the mouse over
    • this field is present expanded in the exported files

Cause

  • State of the thread
  • STACK value is the standard one
  • BLOCKED or BLOCKER

Occurences Number of times this stack is appearing in all the threads dumps over the selected period of time.

Clients

  • DS client calling the Top service

Method hotspots

In this example, the stack is analyzed like this :

  1. the technical stack is line 5
  2. the first known stack is line 17: the first calypso method
  3. the top level service is line 87
 1. "SwingWorker-pool-791894282-thread-6" #212 prio=5 os_prio=0 tid=0x00007f1a49cb3000 nid=0x394e in Object.wait() [0x00007f1aa6685000]
 2.   java.lang.Thread.State: WAITING (on object monitor)
 3.      at java.lang.Object.wait(Native Method)
 4.      at java.lang.Object.wait(Object.java:502)
 5.        at org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:413)
...
17.        at com.calypso.tk.service.LocalCacheClient.getCurrencyPair(LocalCacheClient.java:1638)
18.        at com.calypso.tk.service.LocalCache.getCurrencyPair(LocalCache.java:742)
...
50.        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:465)
51.        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:423)
52.        at com.calypso.tk.util.SerialUtil.readObject(SerialUtil.java:209)
53.        at com.calypso.tk.util.GZIPCompression.uncompressObject(GZIPCompression.java:76)
54.        at com.calypso.tk.util.Compression.uncompressObject(Compression.java:183)
55.        at com.calypso.tk.util.SerialUtil._bytes2object(SerialUtil.java:235)
56.        at com.calypso.tk.util.SerialUtil.bytes2object(SerialUtil.java:183)
...
87         at com.calypso.tk.marketdata.PricingEnv.loadPE(PricingEnv.java:1489)

Hotspots in details

To configure threads dumps, please refer to HpaThreadStackService properties (e.g. IntroscopeAgent_dataserver.profile)

hpa.service.startup.HpaThreadStackService=true or false
hpa.service.frequency.HpaThreadStackService=600000

(10 minutes by default)

The dump is parsed, filtered (based on configuration file), all stacks that are not interesting (wait, idle…) are removed.

All this information is saved in a database that belong to HPA extractor