<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Calibri" size="2"><span style="font-size:11pt;">
<div>I have simple Erlang echo server:</div>
<div><font face="Courier New">loop() -></font></div>
<div><font face="Courier New"> receive</font></div>
<div><font face="Courier New"> {From, Request} -></font></div>
<div><font face="Courier New"> erlang:send(From, Request),</font></div>
<div><font face="Courier New"> loop()</font></div>
<div><font face="Courier New"> end.</font></div>
<div>This echo server started on the Server1.</div>
<div> </div>
<div>And I have some client application (Basho Bench test):</div>
<div><font face="Courier New">run(send, _KeyGen, ValueGen, State) -></font></div>
<div><font face="Courier New"> Msg = ValueGen(),</font></div>
<div><font face="Courier New"> erlang:send(State#state.address, {{State#state.reg_name, node()}, {self(), Msg}}),</font></div>
<div><font face="Courier New"> {ok, State}.</font></div>
<div>Wihich sends many messages to the echo server.</div>
<div> </div>
<div>When I started client application on the Server2 I've found the crash of the echo server.</div>
<div><font face="Courier New">=erl_crash_dump:0.2</font></div>
<div><font face="Courier New">Wed Jan 15 17:04:26 2014</font></div>
<div><font face="Courier New">Slogan: eheap_alloc: Cannot allocate 949152844 bytes of memory (of type "heap").</font></div>
<div><font face="Courier New">System version: Erlang R16B02 (erts-5.10.3) [source] [64-bit halfword] [smp:8:8] [async-threads:10] [kernel-poll:false]</font></div>
<div><font face="Courier New">Compiled: Wed Dec 11 16:19:29 2013</font></div>
<div><font face="Courier New">Taints: crypto</font></div>
<div><font face="Courier New">Atoms: 16134</font></div>
<div><font face="Courier New">=memory</font></div>
<div><font face="Courier New">total: 4131605472</font></div>
<div><font face="Courier New">processes: 2386433264</font></div>
<div><font face="Courier New">processes_used: 2386409264</font></div>
<div><font face="Courier New">system: 1745172208</font></div>
<div><font face="Courier New">atom: 463441</font></div>
<div><font face="Courier New">atom_used: 446760</font></div>
<div><font face="Courier New">binary: 501624</font></div>
<div><font face="Courier New">code: 11870105</font></div>
<div><font face="Courier New">ets: 274696</font></div>
<div><font face="Courier New">low: 3429068696</font></div>
<div> </div>
<div>But the Server1 had 30 Gb free RAM and 16 Gb free swap space before I started the echo server,</div>
<div>and I saw with the "top" command that my echo server allocated only 5 Gb RAM and really used only about 2 Gb.</div>
<div>Why the message queue cannot use more server memory?</div>
<div> </div>
<div>Some information about the Server1 configuration.</div>
<div><font face="Courier New">$ uname -a</font></div>
<div><font face="Courier New">Linux 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux</font></div>
<div><font face="Courier New"> </font></div>
<div><font face="Courier New">$ cat /etc/redhat-release</font></div>
<div><font face="Courier New">Red Hat Enterprise Linux Server release 6.3 (Santiago)</font></div>
<div><font face="Courier New"> </font></div>
<div><font face="Courier New">$ top</font></div>
<div><font face="Courier New">top - 12:27:01 up 2 days, 22:14, 1 user, load average: 0.00, 0.00, 0.00</font></div>
<div><font face="Courier New">Tasks: 310 total, 1 running, 309 sleeping, 0 stopped, 0 zombie</font></div>
<div><font face="Courier New">Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st</font></div>
<div><font face="Courier New">Mem: 33011268k total, 868152k used, 32143116k free, 132708k buffers</font></div>
<div><font face="Courier New">Swap: 16777208k total, 0k used, 16777208k free, 172772k cached</font></div>
<div> </div>
<div>I also tested memory allocation for the big binary data on the same Server1 node:</div>
<div><font face="Courier New">Erlang R16B02 (erts-5.10.3) [source] [64-bit halfword] [smp:8:8] [async-threads:10] [kernel-poll:false]</font></div>
<div><font face="Courier New">Eshell V5.10.3 (abort with ^G)</font></div>
<div><font face="Courier New">1> Z1=fun(N)-> X=lists:map(fun(I)-> binary:copy(<<1>>,1073741824) end, lists:seq(1,N)), io:format("mem: ~p~n", [memory()]), length(X) end.</font></div>
<div><font face="Courier New">#Fun<erl_eval.6.80484245></font></div>
<div><font face="Courier New">2> Z1(10).</font></div>
<div><font face="Courier New">mem: [{total,10758494488},</font></div>
<div><font face="Courier New"> {processes,4659176},</font></div>
<div><font face="Courier New"> {processes_used,4659176},</font></div>
<div><font face="Courier New"> {system,10753835312},</font></div>
<div><font face="Courier New"> {atom,194289},</font></div>
<div><font face="Courier New"> {atom_used,174684},</font></div>
<div><font face="Courier New"> {binary,10737518424},</font></div>
<div><font face="Courier New"> {code,4012558},</font></div>
<div><font face="Courier New"> {ets,172744},</font></div>
<div><font face="Courier New"> {low,4057440}]</font></div>
<div><font face="Courier New">10</font></div>
<div><font face="Courier New">3>Z2=fun(N)-> X=lists:map(fun(I)-> binary:copy(<<1>>,1024) end, lists:seq(1,N)), io:format("mem: ~p~n", [memory()]), length(X) end.</font></div>
<div><font face="Courier New">#Fun<erl_eval.6.80484245></font></div>
<div><font face="Courier New">4>Z2(10485760).</font></div>
<div><font face="Courier New">4> Z2(10485760).</font></div>
<div><font face="Courier New">mem: [{total,11973197304},</font></div>
<div><font face="Courier New"> {processes,795606312},</font></div>
<div><font face="Courier New"> {processes_used,795606312},</font></div>
<div><font face="Courier New"> {system,11177590992},</font></div>
<div><font face="Courier New"> {atom,194289},</font></div>
<div><font face="Courier New"> {atom_used,174744},</font></div>
<div><font face="Courier New"> {binary,11161273768},</font></div>
<div><font face="Courier New"> {code,4012558},</font></div>
<div><font face="Courier New"> {ets,172744},</font></div>
<div><font face="Courier New"> {low,4057440}]</font></div>
<div><font face="Courier New">10485760</font></div>
<div> </div>
<div>And this test completed successfully. But on the same server my echo server crashes when it is used only 4 Gb of the memory.</div>
<div>Has the messages queue its own limit?</div>
<div> </div>
</span></font>
</body>
</html>