CordApp Java 堆 Space 错误和 javax.net.ssl.SSLException
CordApp Java Heap Space error and javax.net.ssl.SSLException
我们创建了一个应用程序:
- 2 个节点 + 1 个公证人
- 2 个 Web 应用程序(每个节点一个)
Corda 版本为 3.2
CordApp 有:
- 第一个流程,在输入中接收对象列表,用于创建状态列表。这个列表将是交易的输出
对象列表(大约 3000 个对象)被分成大小为 450 的列表(因为 ActiveMQ Artemis 错误对于更大尺寸的列表 [java.lang.IllegalArgumentException:记录太大商店])
在第一个流程之后,我们启动另一个具有类似逻辑的流程。在这种情况下,我们有一个 StateAndRef 列表(使用 RPCops 的查询结果)
在流程中作为输入接收并用作交易的输出。
- 要么在这种情况下,我们将列表(大约 3000 个对象)拆分为 450 个元素的子列表。
我们随机收到Java堆Space错误和SslHandshakeCompletionEvent(javax.net.ssl.SSLException:握手超时)。
这似乎是严重的内存泄漏。
我们可以在本地计算机上使用参数 -Xmx10240m (10GB) 仅 完成整个工作流程。监控资源,似乎在事务期间堆特别增长。
这次崩溃的原因可能是什么?
无法将 Corda 用于这种大小的列表吗?
解决方案是不仅在状态的实体 class 中,而且在包含这些实体(扩展 MappedSchema 的实体)的 class 中添加 toString 和 hashCode 的覆盖。现在节点使用的内存永远不会超过 1.2 GB。
我们创建了一个应用程序:
- 2 个节点 + 1 个公证人
- 2 个 Web 应用程序(每个节点一个)
Corda 版本为 3.2
CordApp 有:
- 第一个流程,在输入中接收对象列表,用于创建状态列表。这个列表将是交易的输出
对象列表(大约 3000 个对象)被分成大小为 450 的列表(因为 ActiveMQ Artemis 错误对于更大尺寸的列表 [java.lang.IllegalArgumentException:记录太大商店])
在第一个流程之后,我们启动另一个具有类似逻辑的流程。在这种情况下,我们有一个 StateAndRef 列表(使用 RPCops 的查询结果) 在流程中作为输入接收并用作交易的输出。
- 要么在这种情况下,我们将列表(大约 3000 个对象)拆分为 450 个元素的子列表。
我们随机收到Java堆Space错误和SslHandshakeCompletionEvent(javax.net.ssl.SSLException:握手超时)。 这似乎是严重的内存泄漏。
我们可以在本地计算机上使用参数 -Xmx10240m (10GB) 仅 完成整个工作流程。监控资源,似乎在事务期间堆特别增长。
这次崩溃的原因可能是什么?
无法将 Corda 用于这种大小的列表吗?
解决方案是不仅在状态的实体 class 中,而且在包含这些实体(扩展 MappedSchema 的实体)的 class 中添加 toString 和 hashCode 的覆盖。现在节点使用的内存永远不会超过 1.2 GB。