Corda 节点在尝试加载数据时出现 JVM OutOfMemory 异常

Corda Node getting JVM OutOfMemory Exception when trying to load data

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

结果:
在 "java.lang.OutOfMemoryError: Java heap space" 进行了大约 21000 次成功交易(大约 3 小时 30 分钟)后,节点 B 崩溃了。一段时间后,其他节点由于与节点 B 的连续 "handshake error" 而崩溃。
我们使用Eclipse MAT分析heap dump,发现创建了超过21000个hibernate SessionFactoryImpl实例,占用了Node B上超过85%的内存

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

如果您在 Java 中进行开发,您遇到的问题可能已经被 https://r3-cev.atlassian.net/browse/CORDA-1411

修复了

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