2017-12-23 9 views
1

私はjms msgをリッスンし、修正タグに応じて異なるクロニクルキューに書き込みます。FileChannel.lockは長い間実行されています

public void onEvent(InputEvent inputEvent) { 
    String msg = ((SimpleInputEvent) inputEvent).getMessage(); 
    int start = msg.indexOf("\u000155="); 
    if (start == -1){ 
     // dropping it 
     return; 
    } 
    char symbol = msg.charAt(start+4); 
    for (int i = m_ranges.length - 1; i >= 0; i --){ 
     if (symbol >= m_ranges[i]){ 
      m_appenders[i].writeText(msg); 
      break; 
     } 
    } 
} 

今、私はいくつかのパフォーマンステストを実行していると私はそれがプロファイル

のこの種を持っていることがわかり

Profile

メインスレッドは、上記の機能を実行しています。 そして、FileChannel.lockが30秒間実行されているのがわかります!それが何をしているのか分かりません。このようなキューを作成しました

 m_queues[j] = SingleChronicleQueueBuilder.binary(path + "_" + m_ranges[j]).build(); 
     m_appenders[j] = m_queues[j].acquireAppender(); 

ありがとうございます!

より多くを読んだ後、私は、このテストでは到達することはありません512Mビットのブロックサイズを増加しました。しかし、私はまだ私のパフォーマンステストでボトルネックに達しています。特に、SARは、私はこのコードはで蹴ることはありませんcq4ファイルに書き込まれているだろう。しかし、私はまだ私のシステムでは、いくつかのボトルネックを見るよりも大きなにあるbufferSizeを増加

を示しています。 :私はSARをオンにすると、私は

5時05分41秒AM TPS RTPS wtpsパン/ sのbwrtn/sの .... 5時10分12秒AM 714.14 0.00 714.14 0.00 6901.01

05を参照してください5時41分AM DEV TPS rd_sec/S wr_sec/S avgrq-SZ avgqu-SZのawait svctm%utilの ... 5時10分12秒AM用のrootvg-LVAR 422.00 0.00 3376.00 8.00 0.10 0.23 0.00 0.20

何べき私は机の上に大きな書き込みを避けるために行うのですか?あなたは最近のLinuxを実行していると仮定すると、

+0

OS /カーネルのバージョンとJavaのバージョンを教えてください。 –

答えて

0

、何をSARで見ていることはあなたのディスクにページキャッシュからページを書いてカーネルです。それはどんな「ダイレクト」は、ディスクへの書き込みを行うむしろ

クロニクルキューは、メモリマップファイルを使用しています。そのため、オペレーティングシステムは、キューファイルからのデータが実際にストレージに保存される時期を制御します。

これらの書き込みのサイズを縮小したい場合は、短い間隔でページをフラッシュするようにカーネルを設定できます。

関連する問題