JENNIFER APM

Download 4
Last updated Jul 30, 2026

jennifer-profile

Read the call profile of one JENNIFER transaction, one row per profiled call in call order: methods, SQL statements and their fetches, external calls, errors and the gaps between them, each with its start offset, elapsed time and share of the transaction, as the call tree and profile timeline of the console's transaction detail show them. Use it as the last step of root cause analysis: take a slow or failed transaction found with jennifer-xview and pass its domain_id, txid, collection_time and response_time; the rows show which SQL, external call or method took the time or raised the error.

  • elapsed_ms includes nested calls, so a METHOD row covers its children: look at the deepest rows, or at SQL and TX_CALL rows, to find the cause rather than the outermost method.
  • A large GAP means time spent where nothing is profiled (code without method profiling, locks, sleeps); the row before it ran in that time.
  • Errors are ERROR rows; their parent_no is the call that raised them, and the message holds the detail.
  • Zero rows is an error, not an empty profile: the transaction must be found near collection_time (a few seconds off is fine, a minute off is not).
jennifer-profile [profile=VALUE] domain_id=VALUE txid=VALUE collection_time=VALUE [response_time=VALUE] [limit=VALUE]
profile=VALUE
Optional. Name of the JENNIFER console connect profile (type jennifer-apm-console). Every such profile you are granted is used when omitted. With domain_id, which is an id of one console, exactly one profile must be used: name it when you are granted several.
domain_id=VALUE
Required. e.g. 1000. The domain (sid) of the transaction: the domain_id of the jennifer-xview row.
txid=VALUE
Required. e.g. -2980609390376924461. The txid of the jennifer-xview row.
collection_time=VALUE
Required. e.g. 1792972233338 or "2026-10-26 08:50:33.338". The collection_time of the jennifer-xview row: epoch milliseconds, yyyyMMddHHmmss[SSS], or yyyy-MM-dd HH:mm:ss[.SSS] in double quotes. The console looks for the transaction around it; a few seconds off still finds it, a minute off does not.
response_time=VALUE
Optional. e.g. 482. The response_time of the jennifer-xview row in milliseconds, which the console request carries. 0 when omitted.
limit=VALUE
Optional. e.g. 20000. Maximum rows to return, 10000 by default. Rows come in call order, so a cut profile misses its end.

Output fields

FieldTypeNameDescription
_timeDateStart timee.g. 2026-10-26 08:50:32. When the call started.
profileStringConnect profilee.g. jennifer-prod
domain_idIntegerDomain IDe.g. 1000
txidStringTransaction IDe.g. -2980609390376924461
noLongProfile numbere.g. 34. The console's profile number (No.) of the call.
parent_noLongParent numbere.g. 0. Profile number of the call this one ran inside. Null for the root.
depthIntegerDepthe.g. 1. Nesting depth in the call tree; the root is 0.
typeStringTypee.g. METHOD, SQL, FETCH, TX_CALL (external call), ERROR, MESSAGE, SOCKET, FILE, BATCH, STACK_TRACE, GAP. GAP is time between profiled calls that nothing profiled covers (uninstrumented code or waiting); only gaps of 1 ms or more are returned.
nameStringNamee.g. javax.servlet.http.HttpServlet.service(ServletRequest,ServletResponse): void, SELECT ... FROM orders WHERE id = ?, EXTERNAL-CALL [HTTPS] URL_CONNECTION (url=https://...). The method, the SQL (literals as # or ?), the external call or the error.
start_msLongStart offsete.g. 47. Milliseconds from the start of the transaction.
elapsed_msLongElapsed timee.g. 112. Milliseconds the call took, its nested calls included. Null for types without a duration (MESSAGE, FETCH, ERROR).
shareDoubleSharee.g. 23.24. elapsed_ms as a percentage of the root call's time (the call tree's time bar).
cpu_msLongCPU timee.g. 1. Milliseconds. Null when not measured.
parametersStringParameterse.g. 1,alice. The SQL's bound and inline values, or the method's parameters when profiled.
messageStringMessagee.g. Connection refused. The error's detail message, or another type's detail.
errorBooleanErrore.g. true. The row is an ERROR, or an ERROR is among its direct children (the console's red mark).
receiver_domain_idLongReceiver domaine.g. 1001. For an external call to another monitored service, its domain. Null otherwise.
receiver_instance_idLongReceiver instancee.g. 75600. For an external call to another monitored service, its instance (oid). Null otherwise.

Usage

First pick a transaction with jennifer-xview (here the slowest of the last 10 minutes) and take its domain_id, txid, collection_time and response_time:

jennifer-xview domain_id=1000 duration=10m | sort limit=1 -response_time | fields domain_id, txid, collection_time, response_time, application

Find the slowest SQL and external calls of that transaction:

jennifer-profile domain_id=1000 txid=-2980609390376924461 collection_time=1792972233338 response_time=482 | search type == "SQL" or type == "TX_CALL" | sort limit=10 -elapsed_ms | fields no, type, name, start_ms, elapsed_ms, share, parameters

The call tree without gaps:

jennifer-profile domain_id=1000 txid=-2980609390376924461 collection_time="2026-10-26 08:50:33.338" | search type != "GAP" | fields no, depth, type, name, start_ms, elapsed_ms, share

Repeated SQL (N+1 queries) by statement:

jennifer-profile domain_id=1000 txid=-2980609390376924461 collection_time=1792972233338 | search type == "SQL" | stats count, sum(elapsed_ms) as total_ms, max(elapsed_ms) as max_ms by name | sort -total_ms

Errors and the calls that raised them:

jennifer-profile domain_id=1000 txid=-2980609390376924461 collection_time=1792972233338 | search error == true | fields no, parent_no, type, name, message