Утечка памяти в Czmq в простом приложении PUB / SUB - PullRequest
0 голосов
/ 05 июня 2018

Я сталкиваюсь с проблемой утечки памяти при использовании библиотеки czmq для простого приложения PUB / SUB.Итак, вот описание:

Установка содержит несколько издателей и несколько подписчиков.Каждый издатель и подписчик - это отдельная тема.Потоки - это обычные потоки POSIX на машине с Linux.Я отправляю сообщения от издателя подписчику, используя zmsg_send и zframe.Каждое сообщение содержит один кадр каждый.Я могу отправлять и получать сообщения, но со временем объем памяти, занимаемой приложением, увеличивается.Я использую tcp pub-sub сокеты.

Я хотел бы упомянуть одну вещь: после отправки сообщения я не уничтожаю его, поскольку в документации указано, что оно удалит их после успешной отправки.При получении сообщения я копирую полученное сообщение в локальную структуру, а затем уничтожаю фрейм и zmsg.Я использую zpoller для ожидания сообщений в сокете.Он работает на ручном процессоре.Может ли кто-нибудь подсказать мне, что нужно помнить, чтобы избежать утечки памяти?Приложение отправляет сообщения с частотой 10 Гц.

, и подсказка об общих ошибках, которые я могу сделать, будет полезна.Спасибо.

1 Ответ

0 голосов
/ 07 июня 2018

Вам нужно копать дальше, чтобы выяснить, что утечка памяти.

Запустите ваше приложение под valgrind, как только вы окажетесь в точке, в которой, как вы думаете, происходит утечка памяти, прервите выполнение, и valgrind сообщит обо всех возможных утечках.Надеемся, что настоящая утечка должна выделяться, поскольку она будет большой и очевидной.

Другие вещи, которые можно попробовать, - это уменьшить HWM до 1 для всех сокетов и посмотреть, если эторазница.Может случиться так, что утечка памяти - это просто ZeroMQ с использованием буферов (устанавливается HWM).Linux не всегда будет возвращать память в кучу, если она будет освобождена, если она не нужна где-то еще.

Наконец, благодаря архитектуре ZeroMQ вы можете очень легко разделить ваше приложение на две части, тогда ваши PUB и SUB будутбыть отдельным и сузить утечку дальше.

...