【发布时间】:2018-05-29 23:53:09
【问题描述】:
我想知道如何限制进程可用于分配对象的最大内存(堆)。 如here 所述,我使用 max_heap_size 查看了 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 ()
【问题讨论】: