3

我正在尝试对我的 Play 2.0.2 应用程序进行一些负载测试,但我一直遇到以下异常:

无法调用动作,最终报错:Thrown(akka.pattern.AskTimeoutException: Timed out)

我正在使用http://blitz.io/进行负载测试。

我的技术栈是 Play + mysql。

我没有在我的应用程序中使用任何承诺。

这是自定义的akka​​配置:

#default timeout for promises
promise.akka.actor.typed.timeout=10s

play {

    akka {
        event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
        loglevel = ERROR

        actor {

            deployment {

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

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

            }

            retrieveBodyParserTimeout = 10 second

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

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

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

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

        }

    }

}   

还有一件事:应用程序运行一天左右后,它开始变慢。在检查资源(使用 htop)时,我看到 cpu 利用率为 100%,因此很明显节点卡在做太多工作,它的响应被极大地延迟。此外,我可以看到平均产生了很多 java 实例(8-10 个)。这是为什么?Play 应用程序生成这么多 Java 实例是自然的吗?关于内存使用,java play 实例在生成时获得 512MB-1536MB,我可以从统计数据中看到内存平均使用率约为 50-70%,所以可能这不是问题所在(可能的内存泄漏等) .

我的日程安排非常紧张,因此我将不胜感激任何帮助/指针,我可以调查(或可能解决)这个问题。

非常感谢!

4

1 回答 1

0

我认为您可能有一些阻塞 IO,这就是您需要retrieveBodyParserTimeout = 10 secondhack 的原因。尝试使其异步。

于 2012-12-06T19:52:42.433 回答