有没有一种方法可以减少与xodus垃圾收集器之间的线程争用?
我一直在尝试建立一个实现,其中我使用多个环境来减少写争用,这在某种程度上是有效的-然而,当垃圾收集器运行时,它似乎仍然会阻止所有环境中的任何写线程……我可以观察到,每次垃圾收集器运行时,我的所有写线程都会被阻塞。
xodus中的垃圾收集器不是针对每个环境收集垃圾吗?
任何其他针对xodus的调优技巧都将不胜感激……我很难从中获得更多的写性能。唯一有帮助的环境配置变量是稍微增加日志文件的大小。大多数其他的事情,似乎没有任何影响。
我试过在关闭垃圾收集器的情况下运行,但随后文件计数很快就变得疯狂,这导致了其他问题。
发布于 2018-07-10 23:11:54
Xodus的GC在单个线程中的每个环境中运行,名称为"Exodus background cleaner“。每个GC周期只能针对单个环境执行,因此不同环境的垃圾收集是连续执行的。这就是为什么环境之间不应该有任何争用。此外,只读事务不会阻塞任何写事务,GC事务也不会阻塞。
一些可能影响GC计时的配置参数(请参阅EnvironmentConfig类):
exodus.gc.minUtilization值。此配置参数设置数据库中“可用空间”的目标百分比。值越低,GC负载越少。exodus.gc.transactionAcquireTimeout值。此配置参数设置GC尝试获取独占事务以回收数据的毫秒数。较低的值会降低峰值写入负载期间GC处于活动状态的概率。exodus.gc.transactionTimeout的值。此配置参数设置GC在独占事务中回收数据的毫秒数(如果GC幸运地获得了数据)。exodus.gc.useExclusiveTransaction=false,然后GC将始终尝试在乐观循环中回收数据,但我们的测试表明,乐观循环在高负载下几乎总是工作得更差。https://stackoverflow.com/questions/51050872
复制相似问题