在使用 Gatling 2 执行压力测试时惨败给了 tomcat 6。我们用于压力测试的候选 REST 服务是一个简单的 JSON 响应。
Gatling 将在 1 秒内达到 900 个用户。
播放控制器代码如下:
@BodyParser.Of(BodyParser.Json.class)
public Promise<Result> getSamplePerf() {
Promise<JsonNode> promiseOfJson = Promise.promise(new Function0<JsonNode>() {
public JsonNode apply() throws Exception {
AResponseBean aResponseBean = new AResponseBean();
aResponseBean .setStatus("success");
aResponseBean .setMessage("Hello World. Welcome to Gatling...");
return Json.toJson(aResponseBean );
}
});
return promiseOfJson.map(new Function<JsonNode, Result>() {
public Result apply(JsonNode jsonNode) {
return ok(jsonNode);
}
} , Akka.system().dispatchers().lookup("contexts.my-dispatcher"));
}
我们的 application.conf 包括:
play {
akka {
akka.loggers = ["akka.event.Logging$DefaultLogger", "akka.event.slf4j.Slf4jLogger"]
loglevel = ERROR
actor {
default-dispatcher = {
fork-join-executor {
parallelism-factor = 1.0
parallelism-max = 64
parallelism-min = 8
}
}
}
}
}
contexts {
my-dispatcher {
fork-join-executor {
parallelism-min = 400
parallelism-max = 400
}
}
}
在 tomcat 6 上的测试结果显示:
---- Response Time Distribution ------------------------------------------------
> t < 800 ms 900 (100%)
> 800 ms < t < 1200 ms 0 ( 0%)
> t > 1200 ms 0 ( 0%)
> failed 0 ( 0%)
================================================================================
以及内置 Netty 上的那些:
---- Response Time Distribution ------------------------------------------------
> t < 800 ms 22 ( 2%)
> 800 ms < t < 1200 ms 232 ( 25%)
> t > 1200 ms 646 ( 71%)
> failed 0 ( 0%)
================================================================================
请帮助我们提高游戏性能。