1

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

造成这种情况的根本原因是什么以及如何配置 BDB 来解决它。

谢谢

4

1 回答 1

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 发行版的一部分,因此必须安装它。

于 2011-04-24T03:35:30.973 回答