Infinispan集群式REPL_ASYNC缓存:命令在两个节点之间无限期反弹

如何解决Infinispan集群式REPL_ASYNC缓存:命令在两个节点之间无限期反弹

我在2节点集群中使用infinispan 10.1.8运行spring boot应用程序。 2个节点通过jgroups TCP通信。我配置了几个REPL_ASYNC。

问题: 这些缓存之一有时会导致两个节点一次又一次地交换相同的消息,从而导致较高的cpu和内存使用率。停止此操作的唯一方法是停止两个节点之一。

更多详细信息,这是配置。

 org.infinispan.configuration.cache.Configuration replAsyncNoExpirationConfiguration = new ConfigurationBuilder()
                .clustering()
                    .cacheMode(CacheMode.REPL_ASYNC)
                .transaction()
                    .lockingMode(LockingMode.OPTIMISTIC)
                .transactionMode(TransactionMode.NON_TRANSACTIONAL)
                .statistics().enabled(cacheInfo.isstatsEnabled())
                .locking()
                    .concurrencyLevel(32)
                    .lockAcquisitionTimeout(15,TimeUnit.SECONDS)
                    .isolationLevel(IsolationLevel.READ_COMMITTED)
                .expiration()
                    .lifespan(-1) //entries do not expire
                    .maxIdle(-1) // even when they are idle for some time
                    .wakeUpInterval(-1) // disable the periodic eviction process
                .build();

这些缓存之一(名为formConfig)使我在两个节点之间发生异常通信,这是发生的情况:

  1. 使用jmeter生成仅针对节点1的流量负载
  2. 在一段时间内,节点2通过SingleRpcCommand从节点1接收到缓存条目,没有异常,即使formConfig缓存的行为正常
  3. 一段时间后,新的缓存条目将发送到formConfig缓存

这时,相同的消息似乎在两个节点之间不断跳动:

  • 节点1发送条目mn-node1.company.acme-develop sending command to all: SingleRpcCommand{cacheName='formConfig',command=PutkeyvalueCommand{key=SimpleKey [form_config,MECHANICAL,DESIGN,et,7850]
  • 节点2收到条目mn-node2.company.acme-develop received command from mn-node1.company.acme-develop: SingleRpcCommand{cacheName='formConfig',7850]
  • 节点2将条目发送回节点1 mn-node2.company.acme-develop sending command to all: SingleRpcCommand{cacheName='formConfig',7850]
  • 节点1收到条目mn-node1.company.acme-develop received command from mn-node2.company.acme-develop: SingleRpcCommand{cacheName='formConfig',7850],
  • 节点1将条目发送到节点2,依此类推……

其他一些事情:

  • 系统没有负载,jmeter仅并行运行几个用户
  • 即使停止jmeter,循环也不会停止
  • formConfig是唯一具有这种行为的缓存。所有其他REPL_ASYNC缓存均正常工作。我仅停用了formConfig缓存,系统正常运行。
  • 在机器上运行两个节点时,我无法重现该问题

这里有更多complete log file包括来自两个节点的日志。

其他信息:

  • opendjdk 11热点
  • 弹簧靴2.2.7
  • infinispan弹簧启动启动器2.2.4
  • 使用JbossUserMarshaller

我怀疑

  • 与事务配置有关的东西
  • 或与缓存对象的序列化/反序列化有关的东西

解决方法

唯一可能发生这种情况的情况是SimpleKey具有不同的hashCode()

日志中是否有例外?在对密钥进行序列化和反序列化之后,您是否可以检查hashCode()是否相同?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?