Java Berkeley DB DPL - 读取操作峰值

时间:2011-03-01 09:25:04

标签: java berkeley-db-je

我在Java中使用DPL。 我有1GB的数据存储。我正在发射5个线程,这些线程试图在1秒的间隔后读取相同的记录。最初读取操作大约需要15ms,大约需要5-10次读取,然后稳定到0ms(微秒),然后在10-20次读取后,读取操作会产生一次峰值(15ms)。

这是什么原因以及如何配置BDB来解决它。

由于

1 个答案:

答案 0 :(得分: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会因为需要内存而启动。

顺便说一下,jstat是JDK发行版的一部分,所以必须安装它。