<div dir="ltr"><div>I am trying to use mnesia heavily. It seems there are memory problem on the mnesia or my soruce code.<br>Message i got is <br>"Crash dump was written to: erl_crash.dump<br>eheap_alloc: Cannot allocate 373662860 bytes of memory (of type "heap").</div>

<div><br>Abnormal termination<br>".</div>
<div>I have erlang 5.6.4 on windows xp sp2 and 2G of physical memory. I installed erlang from binary from the <a href="http://erlang.org">erlang.org</a></div>
<div> </div>
<div>Can anybody please tell me what is the problem on my source code and how to solve?<br>I am guessing that erlang has its own limit on the heap memory size and garbage collector is not working fast because of some reason that i don't know.</div>

<div> </div>
<div>Thanks in advance.</div>
<div> </div>
<div> </div>
<div>Here is my source code.</div>
<div> </div>
<div>-compile(export_all).</div>
<p>-record(test, {user, data, timestamp, timestamp1}).</p>
<p>-define(PROCNAME_UPDATER, data_updater). </p>
<p>start_amount(N) -><br> mnesia:start(),<br> create_table(),<br> delete(),<br> write(200000),<br> mnesia:table_info(test,size),<br> data_handler_start().</p>
<p> </p>
<p>data_handler_start() -><br>    case whereis(?PROCNAME_UPDATER) of<br> undefined -><br>     register(?PROCNAME_UPDATER, spawn(?MODULE, data_updater, [5000]));<br> _ -><br>     ?PROCNAME_UPDATER<br>    end.</p>

<p>stop() -><br> ?PROCNAME_UPDATER ! stop.</p>
<p>data_updater(Interval) -> <br>    data_updater(Interval, true).</p>
<p>data_updater(Interval, true) ->      <br>    timer:send_after(Interval, update), <br>    receive  <br> update -> <br>       supdate(),<br>     data_updater(Interval, true); <br> stop -> <br>     ok; <br> {'EXIT', DiedPid, Reason} -> <br>
     io:format("~p died becausere of '~p '",[DiedPid, Reason]), <br>     data_updater(Interval, true);<br> _ -><br>     data_updater(Interval, true) <br>    end.</p>
<p> </p>
<p>create_table() -> <br> mnesia:create_table(test,  <br>   [{ram_copies, [node()]},<br>    {index, [timestamp1]},  <br>    {local_content, true}, <br>    {attributes, record_info(fields, test)}]), <br> ok.</p>
<p><br>write(N) -><br> statistics(runtime),<br> write_data(N),<br> {_, Time} = statistics(runtime),<br> io:format("~nTotal writing time : ~p millisecond~n",[Time]).</p>
<p>write_data(0) -><br> ok;</p>
<p>write_data(N) -><br> {Mega, Sec, _Micro} = now(),<br> mnesia:dirty_write(test, #test{user={"aaaaaaaaaaaaaaaaaaaaaaaaa",random:uniform()},<br>     data = {"aaaaaaaaaaaaaaaaaaaa","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},<br>
     timestamp = now(),<br>     timestamp1 = ((Mega*1000000) + (Sec+random:uniform(10000)))<br>     }),<br> write_data(N-1).</p>
<p>select_data() -><br> mnesia:dirty_select(test, [{'$1',[],['$1']}]).</p>
<p>delete() -><br> mnesia:delete_table(test),<br> create_table().</p>
<p>supdate() -><br> {Mega, Sec, _Micro} = now(),<br> Timesearch = ((Mega*1000000) + (Sec+random:uniform(10000))),<br> io:format("before crash point~n"),<br> mnesia:dirty_select(test, [{#test{user='$0',timestamp1='$1',_='_',data='$2'},<br>
     [{'<', '$1', Timesearch }], <br>     [['$0','$2']]}]),<br> io:format("after crash point~n"),<br> io:format("---------------------------------------~n").</p>
<p> </p></div>