我在Java中使用DPL。 我有1GB的数据存储。我正在发射5个线程,这些线程试图在1秒的间隔后读取相同的记录。最初读取操作大约需要15ms,大约需要5-10次读取,然后稳定到0ms(微秒),然后在10-20次读取后,读取操作会产生一次峰值(15ms)。
这是什么原因以及如何配置BDB来解决它。
由于
答案 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发行版的一部分,所以必须安装它。