2011-03-01 84 views
1

我在Java中使用DPL。 我有1GB的數據存儲。我發射了5個線程,試圖在間隔1秒後讀取相同的記錄。最初的讀取操作大約需要15ms,大約5-10次讀取,然後穩定到0ms(微秒),然後在10-20次讀取後,讀取操作(15ms)產生一次尖峯。Java Berkeley DB DPL - 讀取操作尖峯

這是什麼根源,以及如何配置BDB來解決它。

感謝

回答

1

這影響應用程序的性能輕鬆地可能是垃圾收集器。嘗試使用以下命令監測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在通緝內存的原因開始。

Btw,jstat是JDK發行版的一部分,所以必須安裝它。