Play フレームワーク 2.1 を使用してアプリを開発しています。非常に使いやすいフレームワークです。アプリをすばやく開発できます。しかし、スケーラビリティの問題にも遭遇しました。Play 2.1 は、主張されているほど速くはないようです。パフォーマンスのチューニングを知らなかったからかもしれません。
私の問題は次のとおりです。ユーザーのメールアドレスでログインするための API があります。
パフォーマンスを利用するために、Apache Benchmark (ab) を使用しました。1 回のリクエストには約 230 ミリ秒かかります。5 つの同時リクエストがある場合でも、応答時間は十分に速く、約 280 ミリ秒です。
Concurrency Level: 5
Time taken for tests: 0.306 seconds
Complete requests: 5
Failed requests: 0
Write errors: 0
Total transferred: 3495 bytes
Total POSTed: 1065
HTML transferred: 3135 bytes
Requests per second: 16.34 [#/sec] (mean)
Time per request: 306.009 [ms] (mean)
Time per request: 61.202 [ms] (mean, across all concurrent requests)
Transfer rate: 11.15 [Kbytes/sec] received
3.40 kb/s sent
14.55 kb/s total
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 1 0.1 1 1
Processing: 280 290 13.8 292 305
Waiting: 278 288 13.7 291 304
Total: 280 291 13.9 293 306
しかし、100 個の同時リクエストを使用すると、非常に悪い結果が得られました。
Concurrency Level: 100
Time taken for tests: 4.243 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 69900 bytes
Total POSTed: 21300
HTML transferred: 62700 bytes
Requests per second: 23.57 [#/sec] (mean)
Time per request: 4243.058 [ms] (mean)
Time per request: 42.431 [ms] (mean, across all concurrent requests)
Transfer rate: 16.09 [Kbytes/sec] received
4.90 kb/s sent
20.99 kb/s total
Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 62 31.5 83 89
Processing: 996 3744 544.7 3902 4146
Waiting: 995 3727 542.0 3894 4146
Total: 1084 3806 542.6 3968 4204
私のサーバー マシン: Intel i7、8 コア、2.8GHz、8GB メモリ。Play フレームワークのデフォルト設定を使用しました。プレイフレームワークのパフォーマンスを調整する方法を知っている人はいますか?
スレッドプールのサイズに関係していると思います。ドキュメントによると、play のデフォルトのスレッド プール サイズは # コアです。その場合、100 件のリクエストすべてを処理するのに予想される時間は次のとおりです。
230ms * (100 / 8) = 2875ms
では、デフォルトのスレッド プールのサイズを増やす必要がありますか? しかし、ドキュメントには、プール サイズが # コアに等しい場合に最高のパフォーマンスが得られるはずだと書かれています。
また、netty (play の Web サーバー) のスレッド プール サイズはパフォーマンスに影響しますか? デフォルト値に関する情報は見つかりませんでした。どのように構成されているか知っている人はいますか?
ありがとうございました!