What prints the summary + and summary = lines during a JMeter CLI run?
answer
- Printed by an element, not by the engine
- One property name switches it off
- Plus is the delta, equals the total
- Its GUI name is not the console label
basics
~20 sA Summariser element, known in the GUI as Generate Summary Results. JMeter auto-creates one in CLI mode named by the summariser.name property, shipped as summary; + lines are the delta since the last report and = lines the running total.
solid answer
~40 s`bin/jmeter.properties` ships `summariser.name=summary` **uncommented**, so a CLI (`-n`) run creates a `Summariser` with that name, prints `Creating summariser <summary>` and wires it into the plan root - directly, or inside the `ResultCollector` that a `-l` result file creates. The same element appears in the GUI tree as **Generate Summary Results**. It reports every `summariser.interval` seconds (default `30`), aligned to wall-clock boundaries so that runs started at different times line up. A `+` line is the delta since the last report and carries `Active`, `Started` and `Finished` thread counts; a `=` line is the running total and carries none. Both show sample count, elapsed, rate, `Avg`, `Min`, `Max` and `Err` - and no percentile at all. `summariser.log` and `summariser.out`, both defaulting to `true`, decide whether the line reaches the log file, standard output, or both.
code
text · 4 linesCreating summariser <summary>
summary + 16 in 0:00:12 = 1.3/s Avg: 1608 Min: 1163 Max: 2009 Err: 0 (0.00%) Active: 5 Started: 5 Finished: 0
summary + 82 in 0:00:30 = 2.7/s Avg: 1518 Min: 1003 Max: 2020 Err: 0 (0.00%) Active: 5 Started: 5 Finished: 0
summary = 98 in 0:00:42 = 2.3/s Avg: 1533 Min: 1003 Max: 2020 Err: 0 (0.00%)go deeper
Recognise the two line shapes on a CLI run: + is the last interval, = is everything so far. Know the numbers shown are count, rate, Avg, Min, Max and Err.
Explain that the lines come from a Summariser element auto-created from summariser.name, that summariser.interval sets the cadence, and that a line is written only when a sample arrives.
Use it as a liveness check rather than a verdict: silence means nothing completed, and adding your own Generate Summary Results named summary merges into the automatic one's totals.
Decide what a team's CLI runs print and where it lands - summariser.out for the CI console, summariser.log for the archived jmeter.log - and what other signal a run must emit besides it.
## Where the lines come from They are printed by a **Summariser** test element - the same class the GUI tree calls **Generate Summary Results**. You almost never add it yourself, because `bin/jmeter.properties` ships ``` summariser.name=summary ``` **uncommented**, and `JMeter.runNonGui` reads that property: if it is non-empty it logs and prints `Creating summariser <summary>`, constructs a `Summariser` with that name. Where it goes depends on whether you asked for a result file: with `-l` it is handed to the `ResultCollector` JMeter creates for that file (`new ResultCollector(summariser)`), and the collector — attached to the root of the cloned test plan — forwards every result to it; without `-l` the Summariser is attached to the root directly. Either way the lines print, which is why they appear whether or not you asked for a `.jtl`. Clear the property and a CLI run prints no summary lines at all; rename it and the label at the start of each line changes with it. ## Reading one line ``` summary + 82 in 0:00:30 = 2.7/s Avg: 1518 Min: 1003 Max: 2020 Err: 0 (0.00%) Active: 5 Started: 5 Finished: 0 ``` - `summary` is the element's name, which is also the accumulator key. - `+` marks a **delta** line: everything since the previous report. `=` marks the **running total**. - `82 in 0:00:30 = 2.7/s` is samples, elapsed and the rate that works out to. - `Avg`, `Min` and `Max` are response times in milliseconds; `Err` is the error count and percentage. - `Active`, `Started` and `Finished` are thread counts, and they are appended **only to `+` lines** - a `=` line never carries them. There is no percentile anywhere in that format. The console summary is a liveness and error signal, not a distribution. ## The cadence, and why it can slip `summariser.interval` (default `30`, in seconds) sets the reporting period, and reports land on wall-clock boundaries so that two runs started at different moments still line up. But the check that decides whether to report lives inside `sampleOccurred`: the element only looks at the clock when a sample result is handed to it. The manual states the consequence directly - a summary line is written only if samples are being emitted, so the interval is not respected when nothing completes. That makes silence meaningful. During a long soak watched on a dashboard, a console that has printed nothing for two minutes is not a broken summariser; it means no sample has finished in that time, which is exactly the moment you want to look at the run. ## Three details that bite 1. **Adding your own Generate Summary Results named `summary` merges into the automatic one.** The element groups by name into a shared accumulator, so the totals become the sum of both scopes. The manual calls this a design choice, not a bug - name yours something else. 2. **`summariser.log` and `summariser.out` both default to `true`.** The line goes to `jmeter.log` and to standard output. Turn `summariser.out` off and a CI job's captured console loses it. 3. **`summariser.ignore_transaction_controller_sample_result` defaults to `true`.** Samples generated by a Transaction Controller are skipped, so the counts follow real samplers rather than doubling. The first and last delta lines are usually short: the first because JMeter is synchronising to the interval boundary, the last because a test rarely ends on one. The final `+` line is printed only if the delta holds samples and something was reported earlier.
- Why can a JMeter summary line be missing for several intervals?The Summariser decides whether to report from inside its sample-received callback, so a line appears only when a sample result arrives after the clock has crossed the next boundary. If every thread is blocked on a long timeout, nothing completes and nothing prints. The run looks frozen because, from the summariser's point of view, it is.
- How do you stop a CLI run from printing summary lines?Comment out or empty `summariser.name` in `bin/jmeter.properties`. JMeter only constructs the Summariser when that property is non-empty, so an empty value means no automatic element and no lines. The Generate Summary Results element is still there to add by hand if you want one under a narrower scope.
saying these in an interview costs you the question
- Thinks the lines come from the result file writer
- Believes the interval holds even when no samples finish
- Expects a percentile in the summary line
- Assumes the total line shows active thread counts
- Thinks it only appears when a result file is requested