[erlang-questions] eheap_alloc crash when using mnesia

Yongbeom Pak ruzin82@REDACTED
Mon Oct 20 15:33:48 CEST 2008


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

Abnormal termination
".
I have erlang 5.6.4 on windows xp sp2 and 2G of physical memory. I installed
erlang from binary from the erlang.org

Can anybody please tell me what is the problem on my source code and how to
solve?
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.

Thanks in advance.


Here is my source code.

-compile(export_all).

-record(test, {user, data, timestamp, timestamp1}).

-define(PROCNAME_UPDATER, data_updater).

start_amount(N) ->
 mnesia:start(),
 create_table(),
 delete(),
 write(200000),
 mnesia:table_info(test,size),
 data_handler_start().



data_handler_start() ->
    case whereis(?PROCNAME_UPDATER) of
 undefined ->
     register(?PROCNAME_UPDATER, spawn(?MODULE, data_updater, [5000]));
 _ ->
     ?PROCNAME_UPDATER
    end.

stop() ->
 ?PROCNAME_UPDATER ! stop.

data_updater(Interval) ->
    data_updater(Interval, true).

data_updater(Interval, true) ->
    timer:send_after(Interval, update),
    receive
 update ->
       supdate(),
     data_updater(Interval, true);
 stop ->
     ok;
 {'EXIT', DiedPid, Reason} ->
     io:format("~p died becausere of '~p '",[DiedPid, Reason]),
     data_updater(Interval, true);
 _ ->
     data_updater(Interval, true)
    end.



create_table() ->
 mnesia:create_table(test,
   [{ram_copies, [node()]},
    {index, [timestamp1]},
    {local_content, true},
    {attributes, record_info(fields, test)}]),
 ok.


write(N) ->
 statistics(runtime),
 write_data(N),
 {_, Time} = statistics(runtime),
 io:format("~nTotal writing time : ~p millisecond~n",[Time]).

write_data(0) ->
 ok;

write_data(N) ->
 {Mega, Sec, _Micro} = now(),
 mnesia:dirty_write(test,
#test{user={"aaaaaaaaaaaaaaaaaaaaaaaaa",random:uniform()},
     data =
{"aaaaaaaaaaaaaaaaaaaa","bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"},
     timestamp = now(),
     timestamp1 = ((Mega*1000000) + (Sec+random:uniform(10000)))
     }),
 write_data(N-1).

select_data() ->
 mnesia:dirty_select(test, [{'$1',[],['$1']}]).

delete() ->
 mnesia:delete_table(test),
 create_table().

supdate() ->
 {Mega, Sec, _Micro} = now(),
 Timesearch = ((Mega*1000000) + (Sec+random:uniform(10000))),
 io:format("before crash point~n"),
 mnesia:dirty_select(test,
[{#test{user='$0',timestamp1='$1',_='_',data='$2'},
     [{'<', '$1', Timesearch }],
     [['$0','$2']]}]),
 io:format("after crash point~n"),
 io:format("---------------------------------------~n").
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20081020/b6334e7d/attachment.htm>


More information about the erlang-questions mailing list