Corda Node在尝试加载数据时获取JVM OutOfMemory异常

时间:2018-05-08 07:40:38

标签: corda

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

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

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

1 个答案:

答案 0 :(得分:2)

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

此修复程序尚未在Corda 3.1中提供,但JIRA票证提供了一种解决方法。您需要在已定义的equals的任何子类上覆盖hashCodeMappedSchema。这应该可以解决您正在观察的问题。