<div>Hi Motiejus,</div><div><br></div><div>Thanks for your reply.</div><div><br></div><div>My OS version is OS X 10.11.3; the erlang version is OTP18.3; the erlang compile flag is default, we don't</div><div>change any configuration.</div><div>The problem also exist on CentOS 6.4. </div><div><br></div><div>Thanks,</div><div>BRs/Michael</div><div><br></div><div><includetail><div> </div><div> </div><div style="font:Verdana normal 14px;color:#000;"><div style="FONT-SIZE: 12px;FONT-FAMILY: Arial Narrow;padding:2px 0 2px 0;">------------------ Original ------------------</div><div style="FONT-SIZE: 12px;background:#efefef;padding:8px;"><div id="menu_sender"><b>From: </b> "Motiejus Jakštys"<desired.mta@gmail.com>;</div><div><b>Date: </b> Thu, Sep 22, 2016 07:59 PM</div><div><b>To: </b> "叶少波"<shaobo.ye@qingteng.cn>; <wbr></div><div></div><div><b>Subject: </b> Re: [erlang-questions] How to dig why get_tcp/port allocate so muchbinary memory?</div></div><div> </div><div dir="ltr"><div><div>Replying personally to reduce noise in the list, but it would be super helpful  to know your OS, Erlang version and Erlang compile flags. A follow-up email would be worthwhile (as I can't answer you, but, with the information, there are people in this list that can).<br><br></div><div>Motiejus<br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 22, 2016 at 11:41 AM, 叶少波 <span dir="ltr"><<a href="mailto:shaobo.ye@qingteng.cn" target="_blank">shaobo.ye@qingteng.cn</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Hi experts,</div><div><br></div><div>I wrote a server that accepts TCP connections. The listen socket starts with the options below:</div><div><div>  -define(TCP_OPTS, [</div><div>    binary,</div><div>    {backlog, 256},</div><div>    {packet, 0},</div><div>    {active, false},</div><div>    {reuseaddr, true},</div><div>    {nodelay, false},</div><div>    {delay_send, true},</div><div>    {keepalive, true},</div><div>    {send_timeout, 60000},</div><div>    {exit_on_close, true}</div><div>]).</div></div><div>On the server node every new connection will spawn a new gen_server to handle it.</div><div><br></div><div>And  then I spawn 5000 gen_servers on another erlang node(I call it Client node), every gen_server will connect to the server via TCP.</div><div><br></div><div>It is a really simple case.</div><div><br></div><div>After setup 5000 connections I found the binary memory on server node was used up to 17G;</div><div>and the binary memory on the Client node was 42M.  It is a huge difference.</div><div><br></div><div>Then I rebooted  the erlang node with "+Mim true"  and "+Mis true"; after re-setup 5000 connections again, I used </div><div>instrument:memory_status(<wbr>types) to check the memory status, I found the dry_binary allocated 17G memory:</div><div><div>[{drv_binary,[{sizes,<wbr>1844114912,1844116842,<wbr>1844116842},</div><div>              {blocks,5227,5724,5724}]},</div><div> {code,[{sizes,39944997,<wbr>39955374,39955374},</div><div>        {blocks,1321,1321,1321}]},</div><div> {heap,[{sizes,28000216,<wbr>78942872,78942872},</div><div>        {blocks,5263,5267,5267}]},</div><div> {old_heap,[{sizes,21132056,<wbr>72481264,72481264},</div><div>            {blocks,2940,4736,4736}]},</div><div> {binary,[{sizes,17908918,<wbr>21738516,21738516},</div><div>          {blocks,25087,35039,35039}]},</div><div> {proc_tab,[{sizes,12582975,<wbr>12582975,12582975},</div><div>            {blocks,1,1,1}]},</div><div> {export_entry,[{sizes,<wbr>7108992,7108992,7108992},</div><div>                {blocks,40392,40392,40392}]},</div><div> {db_term,[{sizes,6930120,<wbr>6930200,6930200},</div><div>           {blocks,13149,13150,13150}]},</div><div> {port_tab,[{sizes,6291519,<wbr>6291519,6291519},{blocks,1,1,<wbr>1}]},</div><div> {proc,[{sizes,4211200,<wbr>4212800,4212800},</div><div>        {blocks,5264,5266,5266}]},</div><div> {port,[{sizes,3392108,<wbr>3393432,3393432},</div><div>        {blocks,5101,5103,5103}]},</div></div><div>.......</div><div><br></div><div>My question is : How can I decrease the drv_binary memory? What parameter caused the server used so much memory?</div><div><br></div><div>Thanks,</div><div>BRs/Michael</div><div><br></div><div><br></div><div><br></div><div><u></u><u></u></div><br>______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Motiejus Jakštys</div>
</div>

</div><!--<![endif]--></includetail></div>