在将czmq库用于简单的 PUB / SUB
应用程序时,我遇到了内存泄漏问题。所以,这是描述:
该设置包含多个发布者和多个订阅者。每个发布者和订阅者都是一个单独的线程线程是Linux机器上的普通POSIX线程。我正使用zmsg_send
和zframe
向发布商发送消息。每条消息包含一个帧。我能够发送和接收消息,但随着时间的推移,我发现应用程序占用的内存增加了。我正在使用tcp pub-sub套接字。
我想提到的一件事是,在发送消息后我没有销毁它,因为文档中提到它会在发送成功后解析它们。在接收消息时,我将收到的消息复制到本地结构中,然后我销毁帧和zmsg。我正在使用zpoller在套接字上等待消息。它在手臂处理器上运行。任何人都可以指导我,我需要记住哪些事情,以避免内存泄漏?应用程序以10 Hz的速率发送消息。
关于我可能犯的一般错误的线索将会有所帮助。感谢。
答案 0 :(得分:1)
你需要进一步深入研究泄漏内存的问题。
在valgrind
下运行您的应用程序,一旦您认为内存泄漏,请中断执行,valgrind
应报告所有可能的泄漏。希望真正的泄漏应该突出,因为它将是大而明显的。
要尝试的其他方法是将所有套接字的 HWM
更改为1并查看是否会产生影响。可能是内存泄漏只是使用缓冲区(由HWM
设置)的ZeroMQ。除非在其他地方需要,否则Linux不会总是将内存返回到堆中。
最后,感谢ZeroMQ的架构,您可以非常轻松地将应用程序拆分为两个,然后PUB
和SUB
将分开,并进一步缩小泄漏范围。