一个简单的 PUB/SUB 应用程序中的 czmq 内存泄漏

Czmq memory leakage in a simple PUB / SUB application

我在将 czmq 库用于简单的 PUB / SUB 应用程序时遇到内存泄漏问题。所以,这里是描述:

设置包含多个发布者和多个订阅者。每个发布者和订阅者都是一个单独的线程。线程是 Linux 机器上的普通 POSIX 线程。我正在使用 zmsg_sendzframe 从发布者向订阅者发送消息。每条消息各包含一帧。我能够发送和接收消息,但随着时间的推移,我发现应用程序占用的内存增加了。我正在使用 tcp 发布-订阅套接字。

我想提及的一件事是,在发送消息后我并没有销毁它,因为文档中提到它 will.destroy 它们在成功发送后。接收消息时,我将接收到的消息复制到本地结构中,然后销毁框架和 zmsg。我正在使用 zpoller 在套接字上等待消息。在 arm 处理器上是 运行。谁能指导我,为了避免内存泄漏,我需要记住哪些事情?应用程序以 10 Hz 的速率发送消息。

关于我可能犯的一般错误的线索会很有帮助。谢谢

您需要进一步挖掘以找出泄漏内存的原因。

运行 您的应用程序在 valgrind 下,一旦您认为内存正在泄漏,中断执行并且 valgrind 应该报告所有可能的泄漏。希望真正的泄漏应该突出,因为它会很大而且很明显。

要尝试的其他事情是将所有套接字的 HWM 减少到 1,看看这是否有所作为。内存泄漏可能只是 ZeroMQ 使用缓冲区(由 HWM 设置)。 Linux 除非在其他地方需要,否则 return 不会总是 return 将内存释放到堆中。

最后,感谢 ZeroMQ 的架构,您可以非常轻松地将您的应用程序一分为二,然后您的 PUBSUB 将分开并进一步缩小泄漏范围。