-
Notifications
You must be signed in to change notification settings - Fork 125
Closed
Description
i created a little service
-module(oom).
-behaviour(gen_server).
-include_lib("kernel/include/logger.hrl").
-export([start_link/1]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2]).
-record(state, {
call_count = <<>>
}
).
start_link(Arg) ->
gen_server:start_link({local, ?MODULE}, ?MODULE, Arg, [])
.
init(Arg) ->
{ok, #state{call_count=Arg}}
.
handle_call(Request, _From, #state{call_count = Callcount} = State) ->
?LOG_DEBUG("Request=~p", [Request]),
{reply, Callcount, State#state{call_count = Callcount + 1}}
.
handle_cast(_E, State) ->
{noreply, State}
.
handle_info(E, State) ->
?LOG_DEBUG("unexpected: ~p", [E]),
{noreply, State}
.
terminate(_Reason, _Tab) ->
?LOG_DEBUG("done"),
ok.
and started it on an esp32-s3.
than i called it repeatedly from a linux node.
-export([t/1]).
t(0) -> ok;
t(N) ->
Response = gen_server:call({oom, '[email protected]'}, N),
io:format("Response=~p~n", [Response]),
timer:sleep(100),
t(N-1).
'''
after 1022 cycles the service crashed leaving the following info
```1970-01-03T00:47:41.469Z [debug] <0.14.0> oom:handle_call/3 (/home/xxxx/ATOM/MyAtomVM/erlang/esp32/oom/src/oom.erl:23) Request=8981
1970-01-03T00:47:41.716Z [debug] <0.14.0> oom:handle_call/3 (/home/xxxx/ATOM/MyAtomVM/erlang/esp32/oom/src/oom.erl:23) Request=8980
1970-01-03T00:47:41.965Z [debug] <0.14.0> oom:handle_call/3 (/home/xxxx/ATOM/MyAtomVM/erlang/esp32/oom/src/oom.erl:23) Request=8979
WARNING: Unable to allocate heap space for raw stacktrace
CRASH
======
pid: <0.14.0>
Stacktrace:
out_of_memory
cp: #CP<module: 4, label: 100, offset: 38>
x[0]: error
x[1]: out_of_memory
x[2]: out_of_memory
Stack
-----
[]
[]
[]
{state,1022}
{<879.276.0>,[alias|#Ref<879.0.35331.4167739403.1000407044.59928>]}
{state,oom,oom,{state,1022}}
<0.1.0>
#CP<module: 4, label: 140, offset: 0>
Mailbox
-------
Monitors
--------
link to <0.1.0>
monitored by resource 0x3fcc6d54 ref=54
monitored by resource 0x3fcc6d54 ref=63
monitored by resource 0x3fcc6d54 ref=70
monitored by resource 0x3fcc6d54 ref=7193
...
~1000 others lines like these
...
monitored by resource 0x3fcc6d54 ref=7200
monitored by resource 0x3fcc6d54 ref=7207
monitored by resource 0x3fcc6d54 ref=7214
monitored by resource 0x3fcc6d54 ref=7221
monitored by resource 0x3fcc6d54 ref=7228
Context memory info
-------------------
context_size = 3996
context_avail_free_memory = 1
heap_size = 914
total_heap_size = 939
stack_size = 8
message_queue_len = 0
Global memory info
------------------
process_count = 14
ports_count = 1
atoms_count = 897
refc_binary_total_size = 344
**End Of Crash Report**
Cannot handle out of memory.
abort() was called at PC 0x4202799f on core 0
0x4202799f: context_monitors_handle_terminate at /home/xxxx/ATOM/dist/AtomVM/src/libAtomVM/context.c:641
Backtrace: 0x40375f29:0x3fcab7e0 0x4037f98d:0x3fcab800 0x40388bf5:0x3fcab820 0x4202799f:0x3fcab890 0x420286d1:0x3fcab8b0 0x420848ad:0x3fcab8e0 0x42057cf5:0x3fcab900 0x42057d9d:0x3fcab9b0 0x4205c7e6:0x3fcab9e0 0x42011e31:0x3fcaba00 0x4212ea00:0x3f
0x40375f29: panic_abort at /home/xxxx/esp/esp-idf/components/esp_system/panic.c:468
0x4037f98d: esp_system_abort at /home/xxxx/esp/esp-idf/components/esp_system/port/esp_system_chip.c:87
0x40388bf5: abort at /home/xxxx/esp/esp-idf/components/newlib/src/abort.c:38
0x4202799f: context_monitors_handle_terminate at /home/xxxx/ATOM/dist/AtomVM/src/libAtomVM/context.c:641
0x420286d1: context_destroy at /home/xxxx/ATOM/dist/AtomVM/src/libAtomVM/context.c:219
0x420848ad: scheduler_terminate at /home/xxxx/ATOM/dist/AtomVM/src/libAtomVM/scheduler.c:432
0x42057cf5: scheduler_entry_point at /home/xxxx/ATOM/dist/AtomVM/src/libAtomVM/opcodesswitch.h:7221
0x42057d9d: context_execute_loop at /home/xxxx/ATOM/dist/AtomVM/src/libAtomVM/opcodesswitch.h:1750
0x4205c7e6: globalcontext_run at /home/xxxx/ATOM/dist/AtomVM/src/libAtomVM/globalcontext.c:739
0x42011e31: app_main at /home/xxxx/ATOM/dist/AtomVM/src/platforms/esp32/main/main.c:126 (discriminator 1)
0x4212ea00: main_task at /home/xxxx/esp/esp-idf/components/freertos/app_startup.c:208
0x403804f5: vPortTaskWrapper at /home/xxxx/esp/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c:139
this does not happen when the service is called locally on the esp.
Do = fun Do(0) ->
ok;
Do(N) ->
Response = gen_server:call(oom, N),
io:format("Response=~p~n", [Response]),
Do(N - 1)
end,
Do(20000),
runs until N = 0.
all programs were compiled with otp-28 erlc.
Metadata
Metadata
Assignees
Labels
No labels