我在 Java 中使用 DPL。我有 1GB 的数据存储。我正在触发 5 个线程,它们试图在 1 秒的间隔后读取相同的记录。最初,读取操作大约需要 15 毫秒,大约 5-10 次读取,然后稳定到 0 毫秒(微秒),然后在 10-20 次读取后,读取操作出现一个峰值(15 毫秒)。
造成这种情况的根本原因是什么以及如何配置 BDB 来解决它。
谢谢
我在 Java 中使用 DPL。我有 1GB 的数据存储。我正在触发 5 个线程,它们试图在 1 秒的间隔后读取相同的记录。最初,读取操作大约需要 15 毫秒,大约 5-10 次读取,然后稳定到 0 毫秒(微秒),然后在 10-20 次读取后,读取操作出现一个峰值(15 毫秒)。
造成这种情况的根本原因是什么以及如何配置 BDB 来解决它。
谢谢
这很容易成为影响应用程序性能的垃圾收集器。尝试使用以下命令监控 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 发行版的一部分,因此必须安装它。