0

私は、生産者と消費者のパターンを持つ Java アプリケーションに取り組んでいます。以前は、プロデューサーはイベントを順番に生成していませんでした (たとえば、'2' は '1' の前に生成されました) が、コンシューマーはそれらを順番に送信する必要がありました (たとえば、'1' の次に '2' の次に '3' など)。これを説明するために、キューを維持するために TreeSet が使用され、要素をピークして削除するために同じ順序でトラバーサルが行われていました。ここまでは順調ですね。変更点は、Producer がイベントを順番に生成するようになったことです。したがって、以下を使用することにしました。

a) LinkedBlockingQueue (本来あるべきキューのように、最初と最後の要素にのみアクセスできるキューの基本的なプロパティを持ちます)。

b) LBQ を使用すると、ツリーセットの O(log n) から O(1) に移動しました。

c) 明示的な同期を記述する必要がなくなりました。ReentrantLock は、LBQ の put および take メソッドを処理します。

d) 明示的な待機/通知を記述する必要がなくなりました。LBQ がそれを処理します。

e) LBQ には 2 つのロックがあるため、プットとテイクは異なる CPU で同時に取得できます。

f) LBQ は CAS を使用して、待機中のスレッドのキューを維持します。

すべてがうまくいっているように思えます。しかし、私は立ち往生しています、ここに次の質問があります:-

a) いくつかのメトリックを収集することによって、TreeSet よりも LBQ を使用する利点を証明できるようにする必要があります。続行するには、Eclipse でどの無料のプロファイラーを使用すればよいですか? Visual VM は問題ありませんが、利用可能なより良いオプションはありますか? (Introscope はアプリケーションの明示的な実行で使用され、ローカル Eclipse では使用されません。これは私が戦うことができない制約であり、TPTP は拒否されます)。

b) LinkedBlockingQueue で 2 つのロックを使用することによるスループットの増加 (紙の上にあるように見えます) をどのように証明すればよいですか? これは、私が見て証明したい重要な側面です。

ありがとう

4

3 に答える 3

0

パフォーマンス統計を測定/表示するために perf4j を (そのグラフ統計アペンダーと共に) 見たことがあると思います (http://perf4j.codehaus.org/)。何らかの理由で実行できない場合は、おそらく役立つので、その理由を共有してください。

また、メトリック (http://metrics.codahale.com/) だけでなく、ヒープ/パフォーマンス測定 (https://github.com/mariusaeriksen) の heapster と ostrich (可能であれば) の組み合わせを調べることもできます。 /ヒープスター)。メトリクスを使用すると、グラファイトまたは神経節の表示に依存できます (JMX を使用しない場合)。

お役に立てれば。

于 2012-07-07T14:23:14.910 に答える
0

JMeterを使用して同様の負荷テストを行いました。また、(ただし、私はこれを行いませんでした)スループットを簡単に計算することもできます。私の場合、テスト対象のシステムのクライアントとして機能する Java Request Java Request Sampler を作成する必要がありました。Java Request Sampler の結果は、JMeter のリスナーによって簡単にグラフ化できます (これらはスループットを示します)。同じことをする必要があるかもしれません。TCP、HTTP などのすぐに使用できるサンプラーがありますが、使用することもできます。

于 2012-07-08T19:29:09.050 に答える
0

メモリ/スレッドの使用を視覚化する場合は、ビジュアル vm または netbeans プロファイラーを使用してみてください。

于 2012-07-07T14:27:23.757 に答える