2009-04-25 15 views
9

私はちょうど1ヶ月前にそれを発見した後、テラコッタの使い方を学んでいます。それは非常にクールな技術です。テラコッタのパフォーマンスとヒント

私がやろうとしていますどのような基本的

マイルート(記録システム)ConcurrentHashMapのです。

Instrumentedクラスの主なものは、HashMapに存在させる30個程度のフィールドを持つ「JavaBean」です。

ハッシュマップには、約20000個のJavaBeansが存在します。

各Beanには、少なくとも5フィールドがあり、5秒ごとに更新されます。

(これらのJavaBeansは、JVMのノード間でアクセスできるようにする必要があるので、私はこのためにテラコッタを使用していた理由がある。)TCと私よりも多くの経験を持つ

誰でも任意のヒントを持っていますか?パフォーマンスが重要です。

他の類似のアプリケーションもありますか?

答えて

7

あなたは1つのロックスコープの下にいくつかの変更をバッチ処理すると、パフォーマンスが向上することを見つけるかもしれません。各同期ブロック/メソッドは、書き込みトランザクションを作成します(書き込みロックを使用すると仮定します)。これはサーバーに送信する必要があります(場合によっては他のノードに戻す)。おそらく1つのロックの下にあるオブジェクトの束でフィールドの束を変更することによって、トランザクションを作成するオーバーヘッドを減らすことができます。少なくとも何かと遊ぶもの。

パーティショニングは、パフォーマンスを向上させるための重要な方法です。変更は、実際にオブジェクトを使用しているノードに送信するだけで済みます。したがって、どのノードが通常特定のオブジェクトに触れるかによって、クラスタの周りに送信する必要のある変更の数を減らすことができれば、パフォーマンスが向上します。

CHMまたはCSMの使用に関するunnutzの提案は良いものです。 CHMはより多くの並行性を可能にします(各内部セグメントを同時にロックして使用することができます)。 CSMはエントリごとに1つのロックを効果的に持ち、N個のテーブルに効果的にN個のパーティションを持ちます。これにより、ロックの競合を大幅に減らすことができます(より多くの内部ロックオブジェクトを管理するコストで)。間もなくCSMの変更が行われると、ロック管理コストは大幅に下がります。

一般的に、我々は良い戦略を見つけるには、次のとおりです。

  1. 性能試験を構築する(マルチスレッドとマルチノード、アプリ(または実際のアプリのようになります!)
  2. オブジェクトを調整する - dev-consoleのクラスター化されたオブジェクトグラフを見て、まったくクラスター化する必要のないオブジェクトを見つけます。これは誤って起こることがあります。時には、長いことが起こるDateをクラスタリングしているかもしれません。小さな変化ですが、マップエントリごとに1つのオブジェクトであり、それは違いを生むかもしれません。
  3. 調整ロック - dev-consoleのロックプロファイラを使用して、小さすぎる、または幅が広いホットロックまたはロックを探します。クラスター化された統計レコーダーは、トランザクションサイズも調べるのに役立ちます。
  4. Tune GCとDGC - JVMガベージコレクションをチューニングしてから、Terracotta Distributed GCを調整します。若いgenGCの頻度を変更します。
  5. チューニングTCサーバー - ここでは非常に詳細なチューニングがたくさんありますが、通常は上記のものが調整されるまで価値がありません。

Terracotta forumsについてもお気軽にお問い合わせください。エンジニアリング、フィールドエンジニアリング、製品管理のすべてがそれらを監視し、回答します。

3

まず、フォーラムでこの質問をすることをお勧めします。

第2に、実際にテラコッタの上にクラスタ化されたアプリケーションのパフォーマンスは、発生する書き込みトランザクションの数によって異なります。 ConcurrentStringMap(キーがStringの場合)またはConcurrentHashMapの使用を検討することができます。 CSMは、パフォーマンスの点からCHMよりずっと優れていることに注意してください。

結局、POJOは遅延して読み込まれます。つまり、各プロパティはオンデマンドでロードされます。

希望に役立ちます。

乾杯

関連する問題