<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
The first problem you are running into is that you are mistaking "words" for "bytes" see: <a href="http://www.erlang.org/doc/efficiency_guide/advanced.html">http://www.erlang.org/doc/efficiency_guide/advanced.html</a><br><br><div>With that information in mind this is what you are really looking at for 1M processes:</div><div><br></div><div><br><hr id="stopSpelling">From: wsong.cn@gmail.com<br>Date: Tue, 10 May 2011 11:55:04 +0800<br>To: erlang-questions@erlang.org<br>Subject: Re: [erlang-questions] Erlang proccess memory usage<br><br>Also I tried to use proc_lib:hibernate/3 with no difference.<br><br><div class="ecxgmail_quote">On Tue, May 10, 2011 at 11:50 AM, Wenqiang Song <span dir="ltr"><<a href="http://wsong.cn" target="_blank">wsong.cn</a>@<a href="http://gmail.com" target="_blank">gmail.com</a>></span> wrote:<br>

<blockquote class="ecxgmail_quote" style="border-left:1px #ccc solid;padding-left:1ex">Hi, 
<div><br></div><div>I'm experimenting with Erlang process and found something that not expected. </div><div><br></div><div>What I do is creating 1M Erlang processes and measure memory usage. Code is as follow:</div><div>


<div>-module(generator).</div><div>-export([start/0, generator/2, loop/0]).</div><div><br></div><div>start() -></div><div>    Pid = self(),</div><div>    spawn( fun()->generator(19,Pid) end ),</div><div>    count (1).</div>


<div><br></div><div>count (Num) -></div><div>    receive</div><div><span style="white-space:pre-wrap">     </span>add -></div><div>%<span style="white-space:pre-wrap">       </span>    io:format("Oopss, ~n"),</div>


<div><span style="white-space:pre-wrap">  </span>    if </div><div><span style="white-space:pre-wrap">           </span>0 =:= ( Num rem 10000 ) -> io:format("Count ~p~n", [Num]);</div>
<div><span style="white-space:pre-wrap">          </span>true -> Q = 3</div><div><span style="white-space:pre-wrap"> </span>    end,</div><div><span style="white-space:pre-wrap">       </span>    count (Num + 1);</div>
<div><span style="white-space:pre-wrap">  </span>_ -></div><div><span style="white-space:pre-wrap">  </span>    io:format("haha, ~n")</div><div>    after 30000 -></div><div>
<span style="white-space:pre-wrap">     </span>    io:format("Count ~p~n", [Num]),</div><div><span style="white-space:pre-wrap">  </span>    count (Num)</div><div>    end.</div><div>
loop() -></div><div>    receive</div><div><span style="white-space:pre-wrap">      </span>_ -></div><div><span style="white-space:pre-wrap">  </span>    io:format("Oops ~n"),</div>
<div>%<span style="white-space:pre-wrap"> </span>    proc_lib:hibernate(?MODULE, loop(), [])</div><div><span style="white-space:pre-wrap">    </span>    loop()</div><div>    end.</div><div>
generator( 0, Pid ) -></div><div>    Pid ! add,</div><div>%    proc_lib:hibernate(?MODULE, loop(), []);</div><div>    loop();</div><div>generator( Depth, Pid ) -></div><div>    spawn( fun()->generator(Depth - 1, Pid) end),</div>


<div>    spawn( fun()->generator(Depth - 1, Pid) end),</div><div>    Pid ! add,</div><div>%    io:format("Depth: ~p, pid: ~p~n", [Depth, Pid]),</div><div>%    proc_lib:hibernate(?MODULE, loop(), []).</div><div>


    loop().</div></div><div>===============End of Code=============</div><div><div>2> i(0,58,0).</div><div>[{current_function,{generator,loop,0}},</div><div> {initial_call,{erlang,apply,2}},</div><div> {status,waiting},</div>


<div> {message_queue_len,0},</div><div> {messages,[]},</div><div> {links,[]},</div><div> {dictionary,[]},</div><div> {trap_exit,false},</div><div> {error_handler,error_handler},</div><div> {priority,normal},</div><div> {group_leader,<0.25.0>},</div>


<div> {total_heap_size,233},</div><div> {heap_size,233},</div><div> {stack_size,1},</div><div> {reductions,9},</div><div> {garbage_collection,[{min_bin_vheap_size,46368},</div><div>                      {min_heap_size,233},</div>


<div>                      {fullsweep_after,65535},</div><div>                      {minor_gcs,0}]},</div><div> {suspending,[]}]</div></div><div><div><br></div><div>3> memory().</div><div>[{total,2759895784},</div><div>


 {processes,2751081712},</div><div> {processes_used,2751067504},</div><div> {system,8814072},</div><div> {atom,615121},</div><div> {atom_used,589205},</div><div> {binary,8608},</div><div> {code,5845747},</div><div> {ets,270928}]</div>


</div><div><br></div><div>Total memory usage is about 2.7G. While when I use i() and i(pid) I saw that each process only uses about 233 bytes. I can't find where the memory is used. Any idea?</div><div><br></div><div>


Thanks</div><div>Andy</div>
</blockquote></div><br><br clear="all"><br>-- <br>有志者,事竟成,破釜沉舟,百二秦关终属楚<br>苦心人,天不负,卧薪尝胆,三千越甲可吞吴<br>
<br>_______________________________________________
erlang-questions mailing list
erlang-questions@erlang.org
http://erlang.org/mailman/listinfo/erlang-questions</div>                                           </body>
</html>