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).
- 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
| Field | Type | Name | Description |
|---|---|---|---|
| _time | Date | Start time | e.g. 2026-10-26 08:50:32. When the call started. |
| profile | String | Connect profile | e.g. jennifer-prod |
| domain_id | Integer | Domain ID | e.g. 1000 |
| txid | String | Transaction ID | e.g. -2980609390376924461 |
| no | Long | Profile number | e.g. 34. The console's profile number (No.) of the call. |
| parent_no | Long | Parent number | e.g. 0. Profile number of the call this one ran inside. Null for the root. |
| depth | Integer | Depth | e.g. 1. Nesting depth in the call tree; the root is 0. |
| type | String | Type | e.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. |
| name | String | Name | e.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_ms | Long | Start offset | e.g. 47. Milliseconds from the start of the transaction. |
| elapsed_ms | Long | Elapsed time | e.g. 112. Milliseconds the call took, its nested calls included. Null for types without a duration (MESSAGE, FETCH, ERROR). |
| share | Double | Share | e.g. 23.24. elapsed_ms as a percentage of the root call's time (the call tree's time bar). |
| cpu_ms | Long | CPU time | e.g. 1. Milliseconds. Null when not measured. |
| parameters | String | Parameters | e.g. 1,alice. The SQL's bound and inline values, or the method's parameters when profiled. |
| message | String | Message | e.g. Connection refused. The error's detail message, or another type's detail. |
| error | Boolean | Error | e.g. true. The row is an ERROR, or an ERROR is among its direct children (the console's red mark). |
| receiver_domain_id | Long | Receiver domain | e.g. 1001. For an external call to another monitored service, its domain. Null otherwise. |
| receiver_instance_id | Long | Receiver instance | e.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: