当我在一个简单的PUB / SUB
应用程序中使用czmq库时,我面临着一个内存泄漏问题。所以,下面是描述:
该设置包含多个发布者和多个订阅者。每个发布服务器和订阅服务器都是一个单独的线程。线程是Linux机器上的普通POSIX线程。我使用zmsg_send
和zframe
将消息从发布者发送到订阅者。每条消息各包含一个帧。我可以发送和接收消息,但随着时间的推移,我发现应用程序占用的内存不断增加。我使用的是tcp发布订阅套接字。
我想提到的一件事是,在发送消息后,我并没有像文档中提到的那样销毁它,它在成功发送后对它们进行了will.destroy。在接收消息时,我将接收到的消息复制到本地结构中,然后销毁帧和zmsg。我使用zpoller在套接字上等待消息。它是在arm处理器上运行的。有没有人可以指导我,为了避免内存泄漏,我需要记住哪些事情?应用程序以10 Hz的速率发送消息。
关于我可能犯的一般性错误的线索将是有帮助的。谢谢。
发布于 2018-06-07 17:23:51
您需要进一步挖掘,以找出内存泄漏的原因。
在valgrind
下运行你的应用程序,一旦你认为内存正在泄漏,中断执行,valgrind
应该报告所有可能的泄漏。希望真正的泄漏能够脱颖而出,因为它将是巨大而明显的。
其他可以尝试的事情是将所有套接字的HWM
's减少到1,看看这是否会有所不同。内存泄漏可能只是ZeroMQ使用缓冲区(由HWM
设置)。如果内存释放,Linux不会总是将内存返回堆,除非其他地方需要它。
最后,由于ZeroMQ的架构,你可以很容易地将你的应用程序一分为二,然后你的PUB
和SUB
将被分开,并进一步缩小泄漏范围。
https://stackoverflow.com/questions/50689447
复制相似问题