CordApp Java堆空间错误和javax.net.ssl.SSLException

时间:2018-11-14 13:52:41

标签: java blockchain rpc heap-memory corda

我们用以下方法创建了一个应用程序:

  • 2个节点+ 1个公证人
  • 2个Web应用程序(每个节点一个)

Corda版本为3.2

CordApp具有:

  • 第一个流程,在输入中接收对象列表,用于创建状态列表。此列表将是交易的输出
  • 对象列表(约3000个对象)被拆分为大小为450的列表(由于ActiveMQ Artemis错误,列表较大[java.lang.IllegalArgumentException:记录太大而无法存储])< / p>

  • 在第一个流程之后,我们启动另一个具有类似逻辑的流程。在这种情况下,我们有一个StateAndRef列表(使用RPCops查询的结果) 作为流中的输入被接收,并用作交易的输出。

  • 在这种情况下,我们都将列表(约3000个对象)拆分为450个元素的子列表。

我们随机收到 Java堆空间错误 SslHandshakeCompletionEvent(javax.net.ssl.SSLException:握手超时)。 这似乎是严重的内存泄漏。

我们只能在本地计算机上使用参数-Xmx10240m(10GB)来完成整个工作流程,仅 。监视资源,似乎在事务处理期间堆特别地增长。

这次崩溃的原因可能是什么?

无法将Corda与具有此大小的列表一起使用吗?

1 个答案:

答案 0 :(得分:2)

解决方案是不仅在州的Entity类中而且在包含这些实体的类中添加toString和hashCode的替代(该类扩展了MappedSchema)。现在,节点永远不会超过1.2 GB的已用内存。