<div><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">I tried two solutions to reduce the memory usage of the problematic process:</span><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">1. calling garbage:collect/0 after processing N packets (varying N=10..128).</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">Nothing changed at all and the bin_alloc memory stayed fragmented as you can see:</span><br style="color:rgb(49,49,49);word-spacing:1px"><a href="http://147.135.36.188:3400/observer_cli_BEFORE.jpg" rel="noreferrer" target="_blank" style="font-size:1rem;word-spacing:1px">http://147.135.36.188:3400/observer_cli_BEFORE.jpg</a><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">The call to instrument:carriers/0:</span><br style="color:rgb(49,49,49);word-spacing:1px"><a href="http://147.135.36.188:3400/instrument_carriers.jpg" rel="noreferrer" target="_blank" style="font-size:1rem;word-spacing:1px">http://147.135.36.188:3400/instrument_carriers.jpg</a><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">The call to instrument:allocations/0:</span><br style="color:rgb(49,49,49);word-spacing:1px"><a href="http://147.135.36.188:3400/instrument_allocations.jpg" rel="noreferrer" target="_blank" style="font-size:1rem;word-spacing:1px">http://147.135.36.188:3400/instrument_allocations.jpg</a><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">2. Hibernating the process after processing N packets (varying N=10..128).</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">The HIT rate went above 90% immediately.</span><br style="color:rgb(49,49,49);word-spacing:1px"><a href="http://147.135.36.188:3400/observer_cli_AFTER.jpg" rel="noreferrer" target="_blank" style="font-size:1rem;word-spacing:1px">http://147.135.36.188:3400/observer_cli_AFTER.jpg</a><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">What is the effect of frequent hibernating on the long term? </span><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">This process is receiving about ~1200 packets/sec under normal load and can reach ~3000 packets/sec under heavy load.</span><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">Is there a better way of solving this memory issue  by tweeting the bin allocator SBC/MBC?</span><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"></div><div dir="auto">/Frank</div><div dir="auto"><br></div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr">A text file would work a lot better, the important information is missing from your last screenshot.</div><div dir="ltr"><br></div><div dir="ltr">This should fit binary_alloc stats for the first scheduler in a screenshot (your system has 48 schedulers):<div><br></div><div><font face="monospace, monospace" style="background-color:rgb(255,242,204)">[_|[SCHED0|_]] = erlang:system_info({allocator, binary_alloc}), io:format("~p~n", [SCHED0]).</font><br></div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 1, 2019 at 11:14 AM Frank Muller <<a href="mailto:frank.muller.erl@gmail.com" target="_blank">frank.muller.erl@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto">Here is the beginning of recon_alloc:snapshot/1.</div></div><div><div class="gmail_quote"><div dir="ltr">Yes, Lukas can help on this. VM’s memory management looks like a mystery.</div><div dir="ltr"><br></div><div dir="ltr"><div><img src="cid:168a8c36bc0768775261" style="width:570px;max-width:100%"></div><br></div><div dir="ltr"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hi Frank,</div><div><br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto">The binary_alloc seems to be the one misbehaving (not 100% sure, see attached screenshot).<br></div></div></blockquote><div><br></div><div><div>I agree, it's your binary_alloc. How many single block carriers in binary_alloc do you have? What about multi-block carriers? Can you share a recon_alloc snapshot?</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div dir="auto"></div><div dir="auto">Is there a way to tweak this allocator strategy SBC/MBC? Lukas Larsson maybe?<br></div></div></blockquote><div><br></div><div>For us, RabbitMQ, defaulting to a lower multi-block carrier size (<a href="http://erlang.org/doc/man/erts_alloc.html#M_lmbcs" target="_blank">+MBlmbcs</a>) as well as changing the allocation strategy (<a href="http://erlang.org/doc/man/erts_alloc.html#M_as" target="_blank">+MBas</a>) made a positive difference. From the screenshot that you've shared, I am guessing that this won't work for you. This is the process that we went through at RabbitMQ: <a href="https://groups.google.com/forum/#!msg/rabbitmq-users/LSYaac9frYw/LNZDZUlrBAAJ" target="_blank">https://groups.google.com/forum/#!msg/rabbitmq-users/LSYaac9frYw/LNZDZUlrBAAJ</a></div><div><br></div><div>I found Lukas' Erlang Memory Management Battle Stories from 2014 to be a great erts_alloc companion: <a href="http://www.erlang-factory.com/static/upload/media/139454517145429lukaslarsson.pdf" target="_blank">http://www.erlang-factory.com/static/upload/media/139454517145429lukaslarsson.pdf</a> & <a href="https://www.youtube.com/watch?v=nuCYL0X-8f4" target="_blank">https://www.youtube.com/watch?v=nuCYL0X-8f4</a></div></div></div></div></div></div></div>
</blockquote></div></div>
</blockquote></div>
</blockquote></div></div>