<div dir="ltr">Hello,<br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 1, 2018 at 3:05 PM, Gerhard Lazu <span dir="ltr"><<a href="mailto:gerhard@lazu.co.uk" target="_blank">gerhard@lazu.co.uk</a>></span> wrote:<br><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>We are running on Erlang 20.3.4 on <font face="monospace, monospace" style="background-color:rgb(238,238,238)">Linux 4.4.0-119-generic 14.04.1-Ubuntu SMP x86_64</font>. These are the flags that we use for beam.smp:</div><div><br></div><div><font face="monospace, monospace" style="background-color:rgb(238,238,238)">/var/vcap/packages/erlang-20.3<wbr>.4/lib/erlang/erts-9.3/bin/bea<wbr>m.smp -W w -A 64 -zdbbl 128000 -K true -stbt db -zdbbl 128000 -P 1048576 -t 5000000 -MHas ageffcbf -MBas ageffcbf -MHlmbcs 512 -MBlmbcs 512</font></div><div><br></div><div>When the node boots, the binary_alloc multiblock carrier utilization is ~99% (90MB allocated, 90MB used). [1]</div><div><br></div><div>As the load on the node starts, binary_alloc mbcs util drops to ~78% (~800MB allocated, ~625MB used). [2]</div><div><br></div><div>When load stops completely, binary_alloc mbcs util drops to ~61%  (~55MB allocated, ~35MB used) & mbcs_pool goes to ~36% (~215MB allocated, ~80MB used). </div></div></blockquote><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"><br></div></blockquote><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>In the context of RabbitMQ, this is a big problem since memory usage controls whether incoming messages are blocked or not (a.k.a. memory alarm). It's essential that the Erlang VM utilises memory as efficiently as possible, otherwise nodes under no load can remain blocked permanently. [3]</div><div><br></div><div>Our goal is for the Erlang VM to have as little unused memory as possible. As you could see in the referenced screenshots [1][2][3], the total unused memory starts at ~30MB and grows to ~280MB. Considering that the total RSS memory that the beam.smp process uses is 545MB [3], half of it goes unused (~280MB), and this is a big problem for RabbitMQ, as mentioned above.</div></div></blockquote><div><br></div><div>Why do you not use erlang:memory() as the base for whether you can accept more messages? Having a low memory utilisation is not bad in itself, unless of course some other program on the same machine needs the memory.</div><div><br></div><div>Looking at the used memory under load and after, at peak the allocated memory is 1510 MB and then after it is 577 MB. So about 2/3rds of the allocated memory was returned to the OS. While this is not perfect, it is not terrible either. Reducing it further may not be easy.</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 dir="ltr"><div><br></div><div>Lukas, you've shared some excellent documentation in the past around the topic of memory management in Erlang. I am wondering if you have deeper/more refined insights that could help our current challenge. In Erlang Memory Management Battle Stories [5], on slide 29, you mention "Decreasing largest mbc size will make more carriers and hopefully be able to free them". In our case, it doesn't, and I'm hoping that you can point us in the right direction.</div></div></blockquote><div><br></div><div>Can you reproduce the behaviour? Would it be possible to get a recon_alloc snaphot during and after load?</div><div><br></div><div>Have you seen <a href="https://github.com/erlang/otp/pull/1790" target="_blank">https://github.com/erlang<wbr>/otp/pull/1790</a> that was just merged to master with the accompanying blog post: <a href="http://blog.erlang.org/Memory-instrumentation-in-OTP-21/">http://blog.erlang.org/Memory-instrumentation-in-OTP-21/</a>?</div><div><br></div><div>I assume that you have tried ageffcaobf?</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 dir="ltr"><div><br></div><div>During this exploration, there's a specific thing that's been bugging us: why is RSS smaller than the allocated memory? <br></div></div></blockquote><div><br></div><div>Every time I try to understand how RSS works I just end up getting more confused.</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 dir="ltr"><div><br></div><div>Thank you all, Gerhard & Loïc.</div><div><br></div><div>[1]: <a href="https://s3-eu-west-1.amazonaws.com/rabbitmq-share/memory-allocators/mbcs_utilization_after_boot.png" target="_blank">https://s3-eu-west-1.amazonaws<wbr>.com/rabbitmq-share/memory-all<wbr>ocators/mbcs_utilization_after<wbr>_boot.png</a></div><div>[2]: <a href="https://s3-eu-west-1.amazonaws.com/rabbitmq-share/memory-allocators/mbcs_utilisation_under_load.png" target="_blank">https://s3-eu-west-1.amazonaws<wbr>.com/rabbitmq-share/memory-all<wbr>ocators/mbcs_utilisation_under<wbr>_load.png</a></div><div>[3]: <a href="https://s3-eu-west-1.amazonaws.com/rabbitmq-share/memory-allocators/mbcs_utilisation_after_load.png" target="_blank">https://s3-eu-west-1.amazonaws<wbr>.com/rabbitmq-share/memory-all<wbr>ocators/mbcs_utilisation_after<wbr>_load.png</a></div><div>[4]: <a href="http://erlang.org/doc/man/erts_alloc.html" target="_blank">http://erlang.org/doc/man/erts<wbr>_alloc.html</a></div><div>[5]: <a href="http://www.erlang-factory.com/static/upload/media/139454517145429lukaslarsson.pdf" target="_blank">http://www.erlang-factory.com/<wbr>static/upload/media/1394545171<wbr>45429lukaslarsson.pdf</a></div><div>[6]: <a href="https://www.erlang-in-anger.com/" target="_blank">https://www.erlang-in-anger.co<wbr>m/</a></div><div>[7]: <a href="https://github.com/ferd/recon" target="_blank">https://github.com/ferd/recon</a></div></div>
<br>______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/list<wbr>info/erlang-questions</a><br>
<br></blockquote></div><br></div></div>