Memory management 如何限制Erlang中的进程内存

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",

我想知道如何限制进程用于分配对象的最大内存(堆)。 如前所述,我使用最大堆大小查看了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", [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)时,它起了作用。谢谢