2011-03-01 38 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发行版的一部分,所以必须安装它。