I see, thanks James. I had no idea config.hpp existed. 

Why would the queue grow if I have conflate set? Doesn’t that mean it should 
only queue one value? 

I’m doing this because there is some data that I would like client programs to 
always have access to, but only the most recent one. So my solution is to use 
CONFLATE and always send it out. 

If you have a better solution to that, I’d be glad to hear it. But until then, 
maybe I should change that value to 1. What other penalties/trade offs are 
there for changing it to 1? 


> On Jun 21, 2018, at 4:39 AM, James Harvey <jhar...@factset.com> wrote:
> 
> Hi Kevin,
> 
> I ran your test code and saw the same issue. I also created the tests with 
> straight libzmq (not czmq) and the issue still occurs.
> 
> The memory is not lost (valgrind confirms) but it does grow.
> 
> Eventually I noticed its proportional to the number of times you call 
> zmq_recv(). 
> 
> Adding code to force heap cleanup and print the stats shows that every 100 
> times zmq_recv is called, the queue is purged.
> 
> malloc_trim(0);
> malloc_stats();
> 
> Finally I found inbound_poll_rate which is used by socket_base to determine 
> how often to check for signals and commands.
> https://github.com/zeromq/libzmq/blob/b77d7610cd91dbe25096b804c77b27065b7dd1fd/src/config.hpp#L53
> 
> Reducing this 1 (as a test) fixed the issue and memory never rose above 4Mb.
> 
> Is this a real issue? I am not sure.
> I guess for some edge cases where you receive a truck load of data and don’t 
> process it. But on the other hand why would you do that.
> 
> Possible fixes I can think of would be a socket_option to modify 
> inbound_poll_rate
> OR
> Force process_commands() on a timer if no activity is occurring.
> 
> Thanks
> 
> James   
> 
> 
> 
> 
> 
> -----Original Message-----
> From: zeromq-dev <zeromq-dev-boun...@lists.zeromq.org> On Behalf Of Kevin Wang
> Sent: 20 June 2018 22:12
> To: zeromq-dev@lists.zeromq.org
> Subject: Re: [zeromq-dev] Memory leak on SUB set with CONFLATE?
> 
> The memory of the SUB process goes up.
> 
> If I remove the getline() call and the SUB process keeps up, the RAM stays 
> still for both. Those programs compile with gcc pretty easily, if you feel 
> like trying it out. Maybe my Ubuntu is just messed up.
> 
> I assume since its CONFLATE is on, maybe the PUB doesn't queue it, but SUB 
> still does? In that case, I also would assume that replacing the old message 
> with the new one would free the memory held by the old message.
> 
> 
>> On 06/20/2018 01:38 PM, James Harvey wrote:
>> When you say “the system memory skyrockets” are you talking about the memory 
>> used by the SUB process or PUB process?
>> 
>> I would expect the memory of the PUB process to increase as it will be 
>> queueing messages.
>> 
>>> On 20 Jun 2018, at 21:02, Kevin Wang <ke...@spikegadgets.com> wrote:
>>> 
>>> the system memory skyrockets,
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev@lists.zeromq.org
>> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> 
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev@lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev@lists.zeromq.org
> https://lists.zeromq.org/mailman/listinfo/zeromq-dev

_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to