Memory management 如何限制Erlang中的进程内存
我想知道如何限制进程用于分配对象的最大内存(堆)。 如前所述,我使用最大堆大小查看了spawn_opt,但我一直收到一个badarg错误。现在可能吗?我希望避免在heapsize超过限制时使用gen服务器终止进程Memory management 如何限制Erlang中的进程内存,memory-management,erlang,Memory Management,Erlang,我想知道如何限制进程用于分配对象的最大内存(堆)。 如前所述,我使用最大堆大小查看了spawn_opt,但我一直收到一个badarg错误。现在可能吗?我希望避免在heapsize超过限制时使用gen服务器终止进程 -module(maxMemCheck). -export([fib/1,printfib/1]). -export([main/0]). printfib(N) -> Res = maxMemCheck:fib(N), io:fwrite("~w ~w~n",
-module(maxMemCheck).
-export([fib/1,printfib/1]).
-export([main/0]).
printfib(N) ->
Res = maxMemCheck:fib(N),
io:fwrite("~w ~w~n", [N, Res]).
fib(0) -> 0 ;
fib(1) -> 1 ;
fib(N) when N > 0 -> fib(N-1) + fib(N-2) .
main () ->
spawn_opt(maxMemCheck,printfib,[10],[{max_heap_size,#{size => 300, kill => true, error_logger => true}}]).
这将导致以下错误:
{"init terminating in do_boot",{badarg,[{erlang,spawn_opt,[maxMemCheck,fib,"\n",[{max_heap_size,#{error_logger=>true,kill=>true,size=>300}}]],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}
Crash dump is being written to: erl_crash.dump...done
init terminating in do_boot ()
语法是正确的,可能您使用的是“旧”erlang版本。此语法使用OTP18或19中引入的map变量。我使用的是OTP18。当我更新到最新版本的OTP(20.3)时,它起了作用。谢谢