在简单的PUB / SUB应用程序中Czmq内存泄漏

时间:2018-06-04 22:08:19

标签: c zeromq publish subscribe

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

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

我想提到的一件事是,在发送消息后我没有销毁它,因为文档中提到它会在发送成功后解析它们。在接收消息时,我将收到的消息复制到本地结构中,然后我销毁帧和zmsg。我正在使用zpoller在套接字上等待消息。它在手臂处理器上运行。任何人都可以指导我,我需要记住哪些事情,以避免内存泄漏?应用程序以10 Hz的速率发送消息。

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

1 个答案:

答案 0 :(得分:1)

你需要进一步深入研究泄漏内存的问题。

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

要尝试的其他方法是将所有套接字的 HWM 更改为1并查看是否会产生影响。可能是内存泄漏只是使用缓冲区(由HWM设置)的ZeroMQ。除非在其他地方需要,否则Linux不会总是将内存返回到堆中。

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