【问题标题】:Performance issues in Play 2.2Play 2.2 中的性能问题
【发布时间】:2013-11-05 14:08:45
【问题描述】:

我将 Thread.sleep(100) 放在 Play 2.2 控制器中以模拟后端操作。

@BodyParser.Of(BodyParser.Json.class)
    public Promise<Result> d() {    
        Promise<JsonNode> promiseOfJson = Promise.promise(new Function0<JsonNode>() {
            public JsonNode apply() throws Exception {
                ABean aBean = new ABean();

                aBean.setStatus("success");
                aBean.setMessage("Hello World...");

                Thread.sleep(100);

                return Json.toJson(aBean);
            }
        });

        return promiseOfJson.map(new Function<JsonNode, Result>() {
            public Result apply(JsonNode jsonNode) {
                return ok(jsonNode);
            }
        });
    }

我的 application.conf 配置为

#Play Internal Thread Pool
    internal-threadpool-size=4

    #Scala Iteratee thread pool
    iteratee-threadpool-size=4

    # Akka Configuration for making parallelism
    # ~~~~~
    # Play's Default Thread Pool
    play {
        akka {
        akka.loggers = ["akka.event.Logging$DefaultLogger", "akka.event.slf4j.Slf4jLogger"]
        loglevel = ERROR
        actor {

            deployment {

                /actions {
                    router = round-robin
                    nr-of-instances = 100
                }

                /promises {
                    router = round-robin
                    nr-of-instances = 100
                }

            }

            retrieveBodyParserTimeout = 5 seconds

            actions-dispatcher = {
                fork-join-executor {
                    parallelism-factor = 100
                    parallelism-max = 100
                }
            } 

            promises-dispatcher = {
                fork-join-executor {
                    parallelism-factor = 100
                    parallelism-max = 100
                }
            }

            default-dispatcher = {
                fork-join-executor {

    #             No. of minimum threads = 8 ; at the most 64 ; or other wise 3 times the no. of processors available on the system 
    #             parallelism-factor = 1.0   
    #             parallelism-max = 64
    #             parallelism-min = 8

                  parallelism-factor = 3.0   
                  parallelism-max = 64
                  parallelism-min = 8

                }     
            }      
        }
      }
    }  

我运行ab命令如下:

ab -n 900 -c 1 http://localhost:9000/a/b/c/d

结果显示每秒仅处理 9 个请求。

可以调整 application.conf 以获得更好的性能吗?如果是,如何?

【问题讨论】:

    标签: java akka performance-testing playframework-2.2


    【解决方案1】:

    这是由 sleep(100) 调用引起的。即使您的所有其余代码都无限快,您仍然只能获得 10 个请求/秒,而只有 1 个测试线程。

    【讨论】:

    • 我是新手玩框架。如果我理解正确,上下文切换应该发生在 100 个线程(parallelism-max 设置为 100)之间共享工作负载(这里工作负载是 sleep(100)),因此期望每秒有更好的请求处理分数。我是正确的还是需要更改某些配置?
    • 用-c 1运行ab意味着只有1个线程发送请求。并且它不会发送下一个请求,直到上一个请求完成。因此,您的服务器可能是多线程的,但您的基准测试软件一次仍然只发送 1 个请求。因此,如果这是您想要的,请尝试 -c 100。
    • 将 ab 命令更改为 ab -n 900 -c 100 localhost:9000/a/b/c/d。发现游戏落后于 spring 应用程序。 Play 请求所需的时间为 8.362 秒,而 Spring 为 1.159 秒。每秒播放请求为 107.63,而 Spring 为 776.49。我的游戏处理请求很糟糕。
    • 当应用程序与后端系统对话时,会有几毫秒的巨大延迟。此外,该后端系统尚未准备好。因此,应用程序的延迟为 100 毫秒。
    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2014-07-23
    • 2014-10-01
    • 1970-01-01
    • 2014-07-30
    相关资源
    最近更新 更多