JavaでDPLを使用しています。私は1GBのデータストアを持っています。1 秒間隔で同じレコードを読み取ろうとしている 5 つのスレッドを起動しています。最初の読み取り操作は、約 5 ~ 10 回のフェッチで約 15 ミリ秒かかり、その後 0 ミリ秒 (マイクロ秒) で安定し、10 ~ 20 回のフェッチの後、読み取り操作で 1 つのスパイク (15 ミリ秒) が発生します。
これの根本的な原因と、それを解決するための BDB の構成方法。
ありがとう
JavaでDPLを使用しています。私は1GBのデータストアを持っています。1 秒間隔で同じレコードを読み取ろうとしている 5 つのスレッドを起動しています。最初の読み取り操作は、約 5 ~ 10 回のフェッチで約 15 ミリ秒かかり、その後 0 ミリ秒 (マイクロ秒) で安定し、10 ~ 20 回のフェッチの後、読み取り操作で 1 つのスパイク (15 ミリ秒) が発生します。
これの根本的な原因と、それを解決するための BDB の構成方法。
ありがとう
これは、アプリケーションのパフォーマンスに影響を与えるガベージ コレクターである可能性があります。次のコマンドで GC サイクルを監視してみてください。
jstat -gccause <pid-of-java-process> 200
スパイクと GC アクティビティの間に相関関係があるかどうかを確認します。Jstat は次の出力を提供します。
100.00 0.00 5.63 86.19 60.53 768 4.165 16 0.796 4.960 unknown GCCause No GC
0.00 96.01 0.00 87.15 60.53 769 4.172 16 0.796 4.967 unknown GCCause No GC
0.00 96.01 82.86 87.15 60.54 770 4.172 16 0.796 4.967 unknown GCCause Allocation Failure
75.27 0.00 69.29 87.15 60.54 770 4.175 16 0.796 4.971 unknown GCCause No GC
0.00 94.75 16.33 87.30 60.56 771 4.179 16 0.796 4.975 unknown GCCause No GC
41.07 0.00 0.00 87.69 60.59 772 4.184 16 0.796 4.980 unknown GCCause No GC
これが表示Allocation failure
される場合、必要なメモリが原因でフル GC が開始されたことを意味します。
ところで、jstat
JDK ディストリビューションの一部であるため、インストールする必要があります。