Hi.
In order to try to achieve 10k req/s, I've been running Gatling 2.2.1 in parallel, distributed over 8 AWS m4.xlarge instances.
The tests keep failing well before I reach this mark, with multiple timeouts (connect and read timeouts).
Outpu:t "(...)j.n.ConnectException: Connection timed out (and read timeouts)"
All the instances' kernel parameters are tuned according to http://gatling.io/docs/2.2.1/general/operations.html (see below for limits and sysctl configuration I'm using).
Any clues what might be causing such limitation? One thing I noticed is that, once Gatling starts reporting a massive amount of these exceptions, the active connections drop to almost 0 (measured on server side).
The simulation looks something like this:
import scala.concurrent.duration._
import scala.math.ceil
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
import io.gatling.core.structure.ScenarioBuilder
import io.gatling.core.structure.PopulationBuilder
import io.gatling.http.request.builder.HttpRequestBuilder
class TestFooBar extends Simulation {
var httpConfig = http.disableWarmUp.baseURL("https://www.foobar.com")
val date_format = new java.text.SimpleDateFormat("yyyy-MM-dd")
var date_string = date_format.format(new java.util.Date())
val full_duration = 20 minutes
val rps_scale = 1f
def createSimpleUrlScenario(url: String, users: Int) : PopulationBuilder = {
val scn = scenario(url).exec(
http(url)
.get(url)
)
.inject(
rampUsersPerSec(1) to(ceil(users * rps_scale).toInt) during(full_duration)
)
.throttle(
jumpToRps(1),
reachRps(ceil(users * rps_scale).toInt) in (full_duration)
)
.protocols(
httpConfig
)
return scn
}
def createSimpleUrlScenario(urlBuilder: HttpRequestBuilder, users: Int) : PopulationBuilder = {
val scn = scenario(urlBuilder.toString).feed(csv("foo/tokens.csv").circular).exec(
urlBuilder
)
.inject(
rampUsersPerSec(1) to(ceil(users * rps_scale).toInt) during(full_duration)
)
.throttle(
jumpToRps(1),
reachRps(ceil(users * rps_scale).toInt) in (full_duration)
)
.protocols(
httpConfig
)
return scn
}
setUp(
createSimpleUrlScenario("/ajax/service1", 5),
createSimpleUrlScenario("/ajax/service2", 46),
createSimpleUrlScenario("/ajax/service3", 32),
createSimpleUrlScenario("/ajax/service4", 29),
createSimpleUrlScenario(
http("/ajax/service5")
.get("/ajax/service5")
.headers(Map(
"Cookie" -> "${token}")), 15)
)
.maxDuration(120 minutes)
}
sysctl