find_breaking_point
Find the concurrency level at which a JMeter test plan breaches its SLA by doubling load until failure, then binary-searching between healthy and broken levels. Returns a searchId to poll for results.
Instructions
Find the concurrency level where a test plan stops meeting its SLA. Runs the plan over and over on its own, driving one thread group's thread count: first doubling the load until the SLA breaks, then binary-searching between the last healthy level and the first broken one. Returns immediately with a searchId; poll get_breaking_point_status for progress and the final breaking point. The thread group is temporarily switched to ramp-up + fixed-plateau (scheduler) mode for the search and its original settings are restored when the search ends. Requires an Aggregate Report, Summary Report, or View Results Tree listener in the plan. Rounds always run the thread group in scheduler mode with an infinite loop count, so every thread repeats its whole scenario until the plateau ends: a request meant to run once per user (e.g. a login) must sit under a Once Only Controller, and a nested Loop Controller runs its count on every repeat. Each round reports its metrics both overall and per label (byLabel, with each label's share of the samples) - check that the mix matches what the plan intends. The SLA is judged on the overall numbers, not per label.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| p95Ms | No | Fail a round when overall p95 latency exceeds this many milliseconds. | |
| planId | Yes | ||
| errorPct | No | Fail a round when the overall error rate exceeds this percentage. | |
| maxThreads | Yes | Safety ceiling - the search never runs more threads than this. | |
| startThreads | No | Thread count for the first round; doubles from there while the SLA holds (default 50). | |
| maxIterations | No | Hard cap on rounds, so a slow search still ends (default 8). | |
| cooldownSeconds | No | Pause between rounds so the system under test recovers (default 5). | |
| toleranceThreads | No | Stop bisecting once the healthy and broken bounds are this close (default: 2% of maxThreads, minimum 5). | |
| threadGroupNodeId | Yes | Node id of the thread group whose thread count the search will drive. | |
| rampSecondsPerThread | No | Ramp-up seconds per thread, so every round adds load at the same rate (default 0.1). | |
| plateauDurationSeconds | No | Seconds to hold full load after ramp-up; only these samples count toward the SLA (default 60). |