framework初めまして。ソフトウェア開発部の辻です。弊社のPlay2.0+Nginxを使ったWebアプリで、CPU使用率が10%に満たないにも関わらず、Akkaのタイムアウト(akka.pattern.AskTimeoutException)が頻発していました。Actorが長時間ブロックされたときに発生します。そこで、テスト環境にてAkkaのタイムアウト設定を変更してみました。タイムアウト設定はconf/application.confの以下の部分を編集することで変更できます。secondタイムアウト設定を5秒にして負荷をかけてみたところCPU使用率が上がりましたが、2秒にして負荷をかけなおすとAkkaのタイムアウトが発生するようになりCPU使用率が下がりました。このことから、タイムアウト設定を延ばせば、CPUに負荷をかけタイムアウトを減らすことができると分かりました。ところが、弊社Webアプリは5秒以内にレスポンスを返さないといけないという制約があり、タイムアウト設定をこれ以上延ばすことはできません。タイムアウト設定は延ばさずに、アプリケーションのレスポンス速度をあげる(レスポンス速度を上げるためにCPUを使うようにする)ために以下のような負荷試験を実施し、チューニングを行いました。1.2.0Akkaのタイムアウト設定は4秒とする負荷設定JMeterで、アクセスが多いと思われるページに以下の設定で負荷をかけました。チューニング前の状態でAskTimeoutExceptionが頻発するように調整しました。100上記の負荷をかけた時のタイムアウト回数(AskTimeoutException発生回数)をカウントし、このアクセスに対してレスポンスを返しきるまでの所要時間を計測します。Playの設定conf/application.confに以下の設定を記述することで、Play内部のAkkaの設定を上書きできます。今回設定したのは以下の3つです。ルータに登録するActorの数。24以下のページを参考にしました。Actor【意訳】データベース駆動アプリのための、Play2最適化についてNginxの設定conf/nginx.confに以下の設定をします。Nginxのworkerプロセス数。1以下のページを参考にしました。(上記までの参考ページから、とりあえず400がmaxになるように設定してみました。)2,3両方を適用するという順で設定してみました。Nginxのworker_processesをCPU数に合わせ、Akkaのスレッド数を増やすことでアプリの処理速度を上げることができると分かりました。まとめAkkaのタイムアウト時間を延ばせばCPUに負荷がかかります。弊社のWebアプリの制約上タイムアウト時間を短く設定していたので、CPUに負荷がかかる前にタイムアウトになっていました。Nginxのworkerを増やし、Playのスレッド数を増やすことでタイムアウトになる前にCPUに負荷をかけてアプリの処理速度をあげることができました。Akkaのスレッド数はまだこの値が適切かどうかはわかりません。今後のアクセス状況やタイムアウトの発生頻度などを見て再度チューニングする必要があります。