Thread Dump Inspector

Reads jstack-style Java thread dumps and points at what is wrong.
One HTML file. Runs in your browser.

[ Open the inspector ]

Before using it After using it
before after

The dump never leaves your machine

Parsed in the browser. No upload, no backend, no analytics, no external request — not even a font. Save the page and it works offline.

Reads both layouts:

"name" - Thread t@N
"name" #N ... tid=0x... nid=0x...

Tabs

FindingsWhat looks wrong, ranked. Start here.
PoolsWhich pools are saturated, and what their busy threads do.
PopulationWhich thread groups exist and how big they are.
Top frameWhere threads sit right now, most crowded first.
StatesState counts, plus a Thread.State reference.
Creation orderThreads in dump order. Leaks show up as a growing tail.
LocksWho waits on which lock, and who holds it.
Stack searchRegex over full stacks.
CompareTwo dumps: what grew, what went away.

Findings

Most checks are generic: a pool with every worker busy, threads piling up in one frame, several waiters on one lock, a deadlock the JVM reported itself.

Checks that match frames of a specific library carry a signature: badge, so a library-specific guess never reads as a universal truth. Only HikariCP ships built in; narrower ones live in rules/.


Custom rules

Add your own without touching the source. Findings > Custom rules > + New rule. Write the body of function (d, helpers):

var starved = d.threads.filter(function (t) {
  return t.state === "BLOCKED" && t.top.indexOf("com.acme.cache.") === 0;
});
if (starved.length < 5) return [];

return [{
  level: "alert",
  title: nThreads(starved.length) + " blocked on the cache lock",
  text: "Find the holder in the Locks tab first.",
  items: starved
}];

Return one finding, an array of them, or nothing when the dump does not match. Every thread field and helper is listed in the editor, under How to write a rule, and in the full reference.

Rules live in localStorage: your browser only, never sent anywhere. A rule that throws becomes its own finding card instead of breaking the tab.

Ready-made rules for specific libraries: rules/. Paste one into the form to use it.


Source on GitHub | Contributing a rule | MIT