Performance Measurements
This page documents load test results for different releases of cardano-rosetta-java
, evaluating performance across various deployment scenarios.
Service Level Agreements (SLAs)
Our performance evaluation is based on the following Service Level Agreements (SLAs), which define the acceptable thresholds for production environments:
- Response Time: A p99 of less than 1 second is the target for all standard API endpoints.
- Error Rate: A non-2xx response rate of less than 1% is considered acceptable.
In specific high-load scenarios, such as querying addresses with hundreds of thousands of transactions, these SLAs may be adjusted to assess system stability under extreme conditions. Any such adjustments are noted in the relevant test results.
Load tests are conducted using Apache Bench (ab) with a ramp-up strategy, progressively increasing concurrency to a predefined ceiling of 500 simultaneous requests.
To better understand the environments in which these results were obtained, please refer to our hardware profiles documentation.
v1.2.9 (Jun 11, 2025)
The following tests were conducted on a mid-level hardware profile with the following specifications: 8 cores, 8 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+.
- Docker Compose
- Huge Address (~373k txs)
- Huge Address (~1.6M txs)
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /network/status | 500 | 169ms | 198ms | 0 | 0.00% | 6120.35 |
2 | /account/balance | 225 | 824ms | 958ms | 0 | 0.00% | 391.41 |
3 | /account/coins | 225 | 783ms | 917ms | 0 | 0.00% | 411.56 |
4 | /block | 175 | 684ms | 837ms | 0 | 0.00% | 407.10 |
5 | /block/transaction | 200 | 691ms | 967ms | 10 | 0.04% | 435.23 |
6 | /search/transactions | 175 | 154ms | 204ms | 150 | 0.30% | 1727.60 |
7 | /construction/metadata | 500 | 210ms | 379ms | 0 | 0.00% | 8331.37 |
This scenario evaluates the performance of querying an address with approximately 373,000 transactions under different pruning configurations. For details on pruning, see Spent UTXO Pruning.
Pruning Enabled (REMOVE_SPENT_UTXOS=true
)
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 500 | 153ms | 414ms | 0 | 0.00% | 7012.95 |
2 | /account/coins | 500 | 184ms | 402ms | 0 | 0.00% | 5964.08 |
Pruning Disabled (REMOVE_SPENT_UTXOS=false
)
For this specific test with pruning disabled, the standard 1-second Service Level Agreement (SLA) is not achievable. Therefore, the SLA was adjusted to 10 seconds to evaluate system stability under extreme load, even with degraded performance.
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 4 | 6486ms | 7263ms | 0 | 0.00% | 1.02 |
2 | /account/coins | 8 | 9011ms | 9384ms | 0 | 0.00% | 1.20 |
This scenario evaluates the performance of querying an address with approximately 1.6 million transactions under different pruning configurations. For details on pruning, see Spent UTXO Pruning.
Pruning Enabled (REMOVE_SPENT_UTXOS=true
)
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 500 | 1304ms | 1710ms | 0 | 0.00% | 694.10 |
2 | /account/coins | 500 | 1184ms | 1551ms | 0 | 0.00% | 779.39 |
Pruning Disabled (REMOVE_SPENT_UTXOS=false
)
For this specific test with pruning disabled on an address with ~1.6M transactions, the standard 1-second Service Level Agreement (SLA) is not achievable. The SLA was adjusted to 10 seconds to evaluate system stability under extreme load. The results for /account/balance
at concurrency 1 are reported despite slightly exceeding this adjusted SLA to provide a transparent view of the performance boundary.
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) | Non-2xx | Error Rate (%) | Reqs/sec |
---|---|---|---|---|---|---|---|
1 | /account/balance | 1 | 10427ms | 10427ms | 0 | 0.00% | 0.16 |
2 | /account/coins | 1 | 9612ms | 9612ms | 0 | 0.00% | 0.11 |
v1.2.7 (Apr 29, 2025)
- Docker Compose
- Hardware Profile: mid-level
- Machine Specs: 8 cores, 8 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) |
---|---|---|---|---|
1 | /network/status | 200 | 61ms | 73ms |
2 | /account/balance | 200 | 708ms | 833ms |
3 | /account/coins | 200 | 737ms | 875ms |
4 | /block | 200 | 618ms | 722ms |
5 | /block/transaction | 175 | 552ms | 691ms |
6 | /search/transactions | 175 | 119ms | 143ms |
7 | /construction/metadata | 56 | 11ms | 15ms |
v1.2.6 (Apr 15, 2025)
- Single Docker
- Docker Compose
- Hardware Profile: mid-level
- Machine Specs: 16 cores, 16 threads, 125GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) |
---|---|---|---|---|
1 | /network/status | 500 | 82ms | 103ms |
2 | /account/balance | 500 | 750ms | 902ms |
3 | /account/coins | 500 | 720ms | 883ms |
4 | /block | 200 | 726ms | 980ms |
5 | /block/transaction | 175 | 596ms | 733ms |
6 | /search/transactions | 175 | 74ms | 94ms |
7 | /construction/metadata | 500 | 72ms | 97ms |
- Hardware Profile: mid-level
- Machine Specs: 8 cores, 8 threads, 47GB RAM, 3.9TB NVMe, QEMU Virtual CPU v2.5+
Maximum concurrency achieved per endpoint
ID | Endpoint | Max Concurrency | p95 (ms) | p99 (ms) |
---|---|---|---|---|
1 | /network/status | 500 | 150ms | 171ms |
2 | /account/balance | 150 | 640ms | 777ms |
3 | /account/coins | 225 | 812ms | 949ms |
4 | /block | 200 | 706ms | 960ms |
5 | /block/transaction | 125 | 397ms | 469ms |
6 | /search/transactions | 175 | 130ms | 161ms |
7 | /construction/metadata | 500 | 127ms | 178ms |