我在 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/