Java Berkeley DB DPL - 读取操作峰值

标签 java berkeley-db-je

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

造成此问题的根本原因是什么以及如何配置 BDB 来解决它。

谢谢

最佳答案

这很容易成为影响应用程序性能的垃圾收集器。尝试使用以下命令监控 GC 周期:

jstat -gccause <pid-of-java-process> 200

看看峰值和 GC Activity 之间是否存在相关性。 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   

当您看到分配失败时,这意味着由于需要内存而启动了完整GC。

顺便说一句,jstat 是 JDK 发行版的一部分,因此必须安装它。

关于Java Berkeley DB DPL - 读取操作峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5152567/

相关文章:

java - 按存储顺序遍历 BerkleyDB 数据库

java - Berkeley DB JE 5.0.x 在 Maven Central 中的坐标是什么?

java - 推荐一个快速且可扩展的持久化 Map - Java

java - 如何找到生成 DocumentEvent 的源组件

Java 正则表达式 : How to match all patterns including overlapping regex matches?

java - 传递多维数组

java - "Convert"Weka 的 java 代码命令行

java - Berkeley DB可以在java中异步使用吗?

java - 逻辑 AND 运算符在这里有什么用吗?

optimization - 向 BerkeleyDB-JE 插入数据越来越慢