Play Framework 2.0.2 で負荷をかけるとエラーが出まくる

2013年4月23日

これは、Play Framework で使用しているAkkaのデフォルト設定による物で、ボディパーサのタイムアウトが1秒に設定されています。

retrieveBodyParserTimeout = 1 second

なので、負荷をかけていって、一つのリクエストが1秒を超えたあたりでタイムアウトのエラーが発生してしまいます。

そこで、Akkaの設定を追加してあげれば良いのですが、どこに追加したら良いかというと

決まりは無い感じですが

confの中にあるapplication.confとか
akka.confを作ってapplication.confincludeするかとかです。

今回は適当にapplication.confの一番下に付けちゃいます。
[text]play {
akka {
event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
loglevel = WARNING

actor {
deployment {
/actions {
router = round-robin
<span style="color: #ff0000;">nr-of-instances = 128</span>
}

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

}

<span style="color: #ff0000;">retrieveBodyParserTimeout = 120 second</span>

actions-dispatcher = {
fork-join-executor {
<span style="color: #ff0000;">parallelism-factor = 100</span>
<span style="color: #ff0000;">parallelism-max = 512</span>
}
}

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

websockets-dispatcher = {
fork-join-executor {
parallelism-factor = 1.0
parallelism-max = 24
}
}

default-dispatcher = {
fork-join-executor {
parallelism-factor = 1.0
parallelism-max = 24
}
}

}
}
}[/text]
適当にretrieveBodyParserTimeoutですが、適当に120秒と指定してみました。

長すぎですね。。

続いて、負荷をかけていくと、まだCPU、メモリ共にマシンに余裕がありそうな感じなので

Play Frameworkの処理スレッド数を増やしてみました。

actions-dispatcherという所の
parallelism-factorを100に
parallelism-maxを512に
設定してみました。

factorの方は、マシンのCPU数×factorの数値分スレッドを増やしますよ、という設定らしく、これも大きすぎですね。まぁいいや。

で、maxの方は、action-dispatcherでは、最大スレッド数をmaxの値までに制限しますよ、という事らしいです。
ようするに、512スレッドまでしか増えないという感じでしょうか。

スレッド数、いくつがちょうど良いんでしょうね。
環境毎に試行錯誤が必要な気がします。

それにしても、まだCPUには余裕があるのは何故なんだ。。

もう少しくらい負荷がかかっても余裕なのに。。

Play framework2,Scala

Posted by GENDOSU