Как ограничить память процесса в Erlang - PullRequest
0 голосов
/ 30 мая 2018

Я хотел бы знать, как я могу ограничить максимальную память (кучу), которую процесс может использовать для выделения объектов.Я посмотрел на spawn_opt с max_heap_size, как упоминалось здесь , но я продолжаю получать ошибку badarg.Возможно ли это сейчас?Я хочу избежать использования сервера gen для уничтожения процесса, когда размер heapsize превышает лимит.

-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 ()

1 Ответ

0 голосов
/ 30 мая 2018

Синтаксис правильный, возможно, вы используете «старую» версию erlang.Этот синтаксис использует переменную карты, которая была введена в OTP18 или 19.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...