<div dir="ltr"><a href="https://blog.heroku.com/archives/2013/11/7/logplex-down-the-rabbit-hole">https://blog.heroku.com/archives/2013/11/7/logplex-down-the-rabbit-hole</a><br><div><br></div><div>Fred, at first: thank you for this tutorial.</div>
<div><br></div><div>It is not just a blogpost, it looks more like a paper into journal =)</div><div><br></div><div><br></div><div><br></div><div>I've experiencing similar problems in erlyvideo, because in some places reallocating memory on gigabits per second speed creates lots of binaries.</div>
<div><br></div><div>For example: if I read from tcp socket with active,once mode, I get 1400 byte blocks, which are big enough to get into big heap, but too small to handle them and it ends in reallocation and copying hundreds times per second.</div>
<div><br></div><div>There is no  {active, 100K} mode that will send messages of 100K bytes, so the only way out is something like:</div><div><br></div><div>handle_info({tcp, Sock, Bin}, State) -></div><div>  {ok, Bin2} = gen_tcp:recv(Sock, 50000),</div>
<div>  handle(<<Bin/binary, Bin2/binary>>)</div><div><br></div><div>Without such primitive patch I get about 500 new binaries per second and CPU is melting out.</div><div>I don't know why, but it is clear: when there are 100 processes in system that creates about 500 small binaries per second, beam.smp is consuming lot of CPU power.</div>
<div><br></div><div><br></div></div>