skip to content

What prints the summary + and summary = lines during a JMeter CLI run?

level: middleimportance: should knowfreq 58%

answer

  1. Printed by an element, not by the engine
  2. One property name switches it off
  3. Plus is the delta, equals the total
  4. Its GUI name is not the console label

basics

~20 s

A 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 lines
text
Creating 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

for a junior

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.

for a middle

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.

for a senior

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.

for a principal

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