通过rpc-client-observation-pool-0,Corda JVM进程使用率高

通过rpc-client-observation-pool-0,Corda JVM进程使用率高,corda,Corda,在Corda4.1中,我启动了几个节点。然后,我把1000个TXN穿过它们。正如预期的那样,cpu在此期间出现峰值。然而,一小时后,java进程仍在使用100%的可用CPU。未向日志输出任何其他内容 当我使用dashboard时,似乎有两个名为rpc-client-observation-pool-0的jvm进程占用了50%的cpu,即使针对它运行的rpc客户端已经退出。不会说谎的-机器没有分配最多的内存 我可以在日志中看到这条消息,一个从RPC返回的热可观测数据从未订阅过。这会浪费服务器端资源

在Corda4.1中,我启动了几个节点。然后,我把1000个TXN穿过它们。正如预期的那样,cpu在此期间出现峰值。然而,一小时后,java进程仍在使用100%的可用CPU。未向日志输出任何其他内容

当我使用dashboard时,似乎有两个名为rpc-client-observation-pool-0的jvm进程占用了50%的cpu,即使针对它运行的rpc客户端已经退出。不会说谎的-机器没有分配最多的内存

我可以在日志中看到这条消息,一个从RPC返回的热可观测数据从未订阅过。这会浪费服务器端资源,因为它正在排队等待检索。它现在正在关闭,但请调整您的代码以调用observable上的.notUsed()来显式关闭它。但我希望在一个小时后,所有热观测都会被关闭(根据错误)


任何关于如何告诉节点显式关闭这些或找出导致持续CPU使用的原因的指针?

您可以在JVM上设置-Dnet.corda.client.rpc.trackRpcCallSites=true, 命令行,您将得到一个堆栈跟踪,其中包含解释泄漏来源的警告


如果您调用的RPC方法返回一个可观察对象,如果您不想要一个可观察对象,那么请订阅,然后立即取消订阅以清除客户端缓冲区并停止服务器流。

您可以在JVM上设置-Dnet.corda.client.RPC.trackRpcCallSites=true, 命令行,您将得到一个堆栈跟踪,其中包含解释泄漏来源的警告

如果您正在调用一个返回可观察的RPC方法,并且如果您不想要可观察的,那么请订阅,然后立即取消订阅以清除客户端缓冲区并停止服务器流