6

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 サーバー) のスレッド プール サイズはパフォーマンスに影響しますか? デフォルト値に関する情報は見つかりませんでした。どのように構成されているか知っている人はいますか?

ありがとうございました!

4

2 に答える 2

7

Play のデフォルトのスレッド設定は、非同期 API を使用するアプリケーション向けに設計されています。

多くのブロッキング呼び出し (通常は「標準」の JDBC データベース呼び出し) を行う場合は、デフォルトの ThreadPool を調整するか、特別に構成された別の ThreadPool で DB 呼び出しを実行する必要があります。

これらすべてのメカニズムを理解するには、Play Framework ドキュメントのスレッド プールのセクションを読むことをお勧めします。これには、このテーマに関する非常に役立つ情報が含まれています。

于 2013-07-09T05:41:30.520 に答える
0

たとえば、-Xmx32000m は、32 GB のヒープ メモリで JVM を実行します。

-Xmx256m はデバッグ モードのデフォルトに近いため、サーバーの RAM メモリ スペース内でどれだけ拡張するかに合わせて変更できます。マシンの I/O レートによっては、クリーンアップするものが多い場合、ガベージ コレクション サイクルが一時停止のように見えることがありますが、通常は 20 ミリ秒以下であり、アプリの目的によっては目立ちません。

于 2014-02-15T12:32:34.777 に答える