【问题标题】:Corda Node getting JVM OutOfMemory Exception when trying to load data尝试加载数据时,Corda 节点出现 JVM OutOfMemory 异常
【发布时间】:2023-03-14 23:20:02
【问题描述】:

背景:
我们正在尝试使用 jmeter 在自定义 CorDapp(Corda-3.1) 中加载数据。
我们的 CorDapp 分布在六个节点(三方、两个公证人和一个 Oracle)。
为加载数据而执行的流程具有非常少的业务逻辑,有三个参与者并且需要两个参与方来签署交易。
下面是环境、配置和测试细节:
服务器:Ubuntu 16.04
内存:8GB
Corda.jar 的内存分配:4GB
Corda-webserver.jar 的内存分配:1GB
JMeter 配置 - 线程(用户):20(每个线程每秒 1 个事务)

结果:
在大约 21000 次成功交易(大约 3 小时 30 分钟)后,节点 B 因“java.lang.OutOfMemoryError: Java heap space”而崩溃。一段时间后,其他节点由于与节点 B 的持续“握手错误”而崩溃。
我们使用 Eclipse MAT 分析堆转储,发现创建了超过 21000 个休眠 SessionFactoryImpl 实例,占用了 Node B 上超过 85% 的内存。

我们需要了解为什么 Corda 网络会创建如此多的对象并将它们持久化在内存中。
我们正在继续调查,因为我们不能 100% 确定这是否完全是 Corda 错误。
解决问题对于我们继续进行进一步测试至关重要。
注意 - 我们有更多关于我们调查的详细信息,但我们无法在此处附加它们,但可以通过电子邮件发送。

【问题讨论】:

  • 上传到 git 并尽可能分享链接。
  • 能分享一下JMeter脚本吗?
  • @opticyclic 问题已解决!您需要 JMeter 脚本供您自己参考吗?
  • 请。可以分享一下吗?

标签: corda


【解决方案1】:

如果您使用 Java 进行开发,您遇到的问题很可能已经被 https://r3-cev.atlassian.net/browse/CORDA-1411 修复了

该修复在 Corda 3.1 中尚不可用,但 JIRA 票证提供了一种解决方法。您需要在您定义的MappedSchema 的任何子类上覆盖equalshashCode。这应该可以解决您观察到的问题。

【讨论】:

  • 覆盖超类的equals和hashcode方法解决了这个问题,我成功发布了100,000个交易,corDapp仍然准备好接受更多交易:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2015-08-06
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多