[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