13

公式のBoneCPドキュメントから: http://jolbox.com/index.html?page = http://jolbox.com/configuration.html

partitionCountロックの競合を減らしてパフォーマンスを向上させるために、各着信接続要求は、スレッドアフィニティを持つプール(つまり、pool [threadId%partition_count])から接続を選択します。この数値が大きいほど、存続期間の短いスレッドがたくさんある場合のパフォーマンスが向上します。特定のしきい値を超えると、これらのプールの保守がパフォーマンスに悪影響を及ぼし始めます(パーティションの接続が不足し始めた場合のみ)。

デフォルト:2、最小:1、推奨:3-4(ただし、アプリ固有)

しかし、それはそれほど明確ではなく、良い例がありません。0〜500の同時スレッドで通常のWebサービスを実行しています。どちらが良い値で、なぜですか?

4

1 に答える 1

20

したがって、内部的にBoneCPには、接続のプールのパーティションカウント数があります。スレッドが接続を処理しようとするたびに、thread.getId() % partitionCountそのプールからの接続を取得して処理します。そして、あなたはmaxConnectionsPerPartition * partitionCount合計で接続の数を持つことになります。

なぜこれがパフォーマンスにプラスの影響を与えるのですか?同じ接続で2つのスレッドを同時に使用しないようにするには(明らかにこれは悪いことです)、BoneCPは接続を解放または取得するためにロックを取得する必要があります。しかし同時に、同じことをしたい他のすべてのスレッドは、そのロックを待つ必要があります。partitionCountしたがって、ある意味では、多数の接続を並行して解放または取得できます。

何番に設定しますか?とにかく並行してこれ以上の作業が行われることはないので、コアの数は良いスタートだと思います。ただし、それ以外の場合は、接続を求めて競合するスレッドの数を予測し、測定して繰り返します。

ところで、世界のほとんどは10年以上にわたってc3poに依存しており、基本的にパーティション数は1に設定されていました。

于 2013-01-21T19:08:25.447 に答える