Java method tracing profiler

Every call, as it happened.

Records every Java method call under the methods you choose, with nothing sampled, and shows each run as its own flame chart.

Open source under the Apache License 2.0, for applications on Java 25 or later.

A Spring Boot startup recorded with Verbatime, shown as a timeline flame chart in JDK Mission Control
A Spring Boot startup, recorded with Verbatime, as a timeline flame chart in JDK Mission Control

Why Verbatime

You need every call it made, in order.

To see where one request, one server startup, or one batch job spent its time, you need every call it made, in order. A sampling profiler only sees some of them, and most other profilers merge all requests into one call tree or flame graph.

All requests, merged

Flame graph
Calls from all requests are added up into one graph. Which request made a call, and in what order, is gone.

Each run, every call

Timeline flame chart
Run 1 of OrderService.placeOrder
Run 2 of OrderService.placeOrder
time →
Each run of a method you choose becomes one call tree, with the order and time of every call in it. In run 2, loadCustomer runs the same query again and again.
Every call
Nothing sampled
Each run of a method you choose becomes one call tree, and nothing is dropped.
Drop in
1 flag
Add one -javaagent flag. No code changes.
Cheap
~35 ns
A recorded call costs about 35 ns.
Large recordings
100M+ calls
100 million calls open smoothly.

Quick start

Record a run in two steps.

Download verbatime-agent.jar and the JDK Mission Control plugin, verbatime-jmc-plugin.jar, from the GitHub releases page. Then record your application from startup until the JVM exits.

  1. Run the application with the agent

    roots= names the method to record, and out= the file to write.

    java -javaagent:/path/to/verbatime-agent.jar=record=startup,roots=com.example.app.OrderService::placeOrder,out=trace.vbtm \
         -jar app.jar
  2. Read the recording

    When the JVM exits, open trace.vbtm in JDK Mission Control with File > Open. The Verbatime plugin shows each run as a timeline flame chart.

    You can also read it from the command line with vbtm.

    vbtm sessions trace.vbtm --sort dur
The timeline flame chart of a recording in JDK Mission Control
The recording opens as a timeline flame chart, with every call in the order it ran.
Read the full quick start

Record your first run.

Verbatime is for development. Run it on your machine to check the performance of a feature you built, not in production.