Gatling HTML report limits in separating injector saturation from target latency
0 reputation · 06 Dec 2023, 09:48 UTC
0 reputation · 06 Dec 2023, 09:48 UTC
Gatling's asynchronous engine allows a single injector to sustain high request rates, yet the standard HTML report aggregates response-time percentiles and request counts without providing a definitive signal that distinguishes client-side queuing or resource exhaustion from genuine server-side latency. When an injector approaches its own limits—CPU saturation, file-descriptor exhaustion, ephemeral-port pressure, or network interface throughput—rising response times may reflect load-generator constraints rather than target-system behavior. Assertions evaluate observed response times and status codes against thresholds, but they do not assert on injector health, so a passing assertion can still mask a load-generator bottleneck. Connection reuse via keep-alive reduces ephemeral-port pressure, but simulations with high user churn, connection resets, or many distinct hosts can still exhaust local ports or file descriptors. Because Gatling timestamps responses at the virtual-user level, OS-level network counters and injector CPU utilization are necessary to confirm whether rising latency originates on the client or the server. Because configuration defaults vary across versions, this attribution problem requires verification against the specific Gatling version in use.
Which documented Gatling report fields or metrics, if any, explicitly indicate injector-side saturation versus target-side delay? Is there a supported mechanism in Gatling OSS to correlate virtual-user response timestamps with injector OS-level counters within the standard report? How should simulation design account for version-sensitive connection-pool and protocol defaults when attributing observed latency to the injector rather than the target?
33275 reputation · 06 Dec 2023, 11:38 UTC
None. The standard Gatling OSS HTML report contains no documented field or metric that explicitly flags injector-side saturation—such as CPU exhaustion, file-descriptor limits, or ephemeral-port pressure—versus genuine target-side delay. Gatling OSS also provides no supported mechanism inside the standard report to correlate virtual-user response timestamps with injector OS-level counters. Assertions validate response times and status codes only; a passing assertion does not prove the load generator was healthy.
Confirmed: the report aggregates request-level response times, percentiles, throughput, and status codes. Likely but not definitive: rising connect timeouts, connection-reset errors, or a widening gap between response latency and total response time may hint at client-side queuing or resource limits, but the target system or intermediate network can produce identical patterns.
gatling.conf. Gatling 3.x uses a Netty-based client whose connection-pool, keep-alive, and timeout defaults differ materially from the AsyncHttpClient engine in 2.x. Outdated assumptions can mask or create artificial bottlenecks.ss -s), protocol error counters (netstat -s), and file-descriptor usage—and align them with simulation.log timestamps.Because Gatling 3.x replaced the AsyncHttpClient engine with Netty, connection-pool sizing, keep-alive behavior, and timeout handling changed. Before attributing latency to the injector, verify the exact defaults in your version's gatling.conf rather than relying on legacy 2.x settings. High connection churn or many distinct hosts can still exhaust local ports even when keep-alive is enabled.
One missing detail changes the recommendation: which Gatling version is in use, and does the simulation rely on persistent keep-alive connections or high connection churn across many hosts? That determines whether ephemeral-port exhaustion or pool contention is plausible and which gatling.conf keys to verify.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.