Gatling 3.0.0 - HTTP request timeout under low load (3 users) - i.g.h.c.i.RequestTimeoutException

Hello all,

Recently we’ve upgraded to Gatling 3.0.0 and when running my baselines I’ve noticed that I’m getting a high volume of timeouts when ramping up. This behaviour is observed upon reaching 3 users and isn’t observed with a similar script on 2.3.0.

Anyone experiencing a similar behaviour? Did we run into a known bug?

The error:

REQUEST 1 SamplePage request_0 1540988593191 1540988653192 KO i.g.h.c.i.RequestTimeoutException: Request timeout to testdomain.com/***.***.***.**:443 after 60000 ms

The Load Injector:
Currently Gatling is being executed from an AWS EC2 instance (c5.large) and is going for a website hosted outside AWS.

The tests were executed from the same instance which has binaries for 2.3.0 and 3.0.0.

The script outline:

Main request gets approximately 40 assets through inferHtmlResources (1 js, 1 css, 38 images). Upon reaching 3 users we start getting timeouts with the latest version.

The same script (with due adjustments) runs without any timeouts. Even if I include all 5 scenarios (similar to the example one) with 11 users each.

`
val httpProtocol = http
.baseUrl(“https://www.testdomain.com”)
.inferHtmlResources(BlackList(), WhiteList(“https://..testdomain.com..”))
.acceptHeader(“image/webp,image/apng,image/,/*;q=0.8”)
.acceptEncodingHeader(“gzip, deflate”)
.acceptLanguageHeader(“en-US,en;q=0.9”)
.userAgentHeader(“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36”)

val SamplePage_0 = Map(
“Accept” → “text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8”,
“Upgrade-Insecure-Requests” → “1”)

val test_duration = 30 minute
val pacing = 0 second
val think_time = 10 second

val SamplePage = scenario(“SamplePage”)

.during(test_duration) {
pause(pacing)
.repeat(28) {
pause(think_time)
.exec(flushHttpCache)
.group(“SamplePage”) {
exec(http(“request_0”)
.get("/samplepage")
.headers(SamplePage_0))
}
}
}

setUp(
SamplePage.inject(rampUsers(11) during (10 minute)),
).protocols(httpProtocol)
`

Hi,

Is there any way you can provide an actionable reproducer? Maybe sharing your actual url privately?
Your problem is probably related to inferHtmlResources and we really can’t investigate if we can’t reproduce.

Further adding, the behaviour seems to be identical to the one reported for WebSockets (as it seems like I’ve also got duplicate requests)

`
REQUEST 1 SamplePage request_0 1540988593191 1540988593575 OK
REQUEST 1 SamplePage request_0 1540988593191 1540988653192 KO i.g.h.c.i.RequestTimeoutException: Request timeout to testdomain.com/...:443 after 60000 ms

`

  • IPs and domain names obfuscated

Thanks in advance

Thanks for the quick turnaround,

I’m checking internally on the point of sharing the URL privately as it’s not a publicly known URL and will get back to you once I have permission to do so.

On the meantime i’ve enabled trace logs, commented the InferHtmlResources line and did 2 more scenarios:

  • Ramp 1 user over 1 minute - all OK, no issues observed;

  • Ramp 2 users over 1 minute - timeout was observed (snippet below);

This allows us to exclude InferHtmlResources as the Root Cause.

`
13:54:19.145 [WARN ] i.g.h.e.GatlingHttpListener - Request ‘request_0’ failed for user 1
io.gatling.http.client.impl.RequestTimeoutException: Request timeout to testdomain.com/...:443 after 60000 ms
13:54:19.147 [WARN ] i.g.h.e.r.DefaultStatsProcessor - Request ‘request_0’ failed for user 1: i.g.h.c.i.RequestTimeoutException: Request timeout to testdomain.com/...:443 after 60000 ms
13:54:19.148 [TRACE] i.g.h.e.r.DefaultStatsProcessor -

Request:
request_0: KO i.g.h.c.i.RequestTimeoutException: Request timeout to testdomain.com/...:443 after 60000 ms

Session:
Session(SamplePage,1,1540993948153,Map(6e12ae89-4916-49b0-b0aa-25956e1020d1 → 0, gatling.http.cache.baseUrl → https://testdomain.com, gatling.http.ssl.sslContexts → SslContexts(io.netty.handler.ssl.OpenSslClientContext@491f95b4,None), gatling.http.referer → https://testdomain.com/SamplePage, 45c2f372-3477-43b4-b404-6425dd5ae7a3 → 4, timestamp.6e12ae89-4916-49b0-b0aa-25956e1020d1 → 1540993948156, gatling.http.cookies → CookieJar(Map(CookieKey(awselb,testdomain.com,/) → StoredCookie(AWSELB=D39B8DBB046BC654B8B379DFBC0F8C59728BAA32D161697230BBADA4BE174CF06FD49416EF287E9B887B1A1DFEB0241057EB09C8F334BEAF00CD745FC41B3BE1501704F0DC, path=/, maxAge=60s,true,true,1540993958452)))),17,KO,List(GroupBlock(List(SamplePage),1540993999141,60001,KO), ExitOnCompleteLoopBlock(45c2f372-3477-43b4-b404-6425dd5ae7a3), ExitAsapLoopBlock(6e12ae89-4916-49b0-b0aa-25956e1020d1,io.gatling.core.session.package$RichExpression$$$Lambda$361/1714688478@47b73726,io.gatling.core.action.Exit@900940d)),io.gatling.core.protocol.ProtocolComponentsRegistry$$Lambda$436/732597634@329228c7)

HTTP request:
GET https://testdomain.com/SamplePage
headers=
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Cache-Control: no-cache
Pragma: no-cache
Accept-Language: en-US,en;q=0.9
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Referer: https://testdomain.com/SamplePage
accept-encoding: gzip, deflate
cookie: AWSELB=D39B8DBB046BC654B8B379DFBC0F8C59728BAA32D161697230BBADA4BE174CF06FD49416EF287E9B887B1A1DFEB0241057EB09C8F334BEAF00CD745FC41B3BE1501704F0DC
origin: https://testdomain.com
host: testdomain.com
cookies=
AWSELB=D39B8DBB046BC654B8B379DFBC0F8C59728BAA32D161697230BBADA4BE174CF06FD49416EF287E9B887B1A1DFEB0241057EB09C8F334BEAF00CD745FC41B3BE1501704F0DC, path=/, maxAge=60s

HTTP response:

`

Thanks

FYI, I’ve run your sample against many public websites and haven’t been able to reproduce your issue.
So I’m afraid we’ll hit a dead end without you providing a way to reproduce :frowning: