【问题标题】:How to limit process memory in Erlang如何在 Erlang 中限制进程内存
【发布时间】: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 ()

【问题讨论】:

    标签: memory-management erlang


    【解决方案1】:

    语法是正确的,也许你使用的是“旧”的 erlang 版本。此语法使用 OTP18 或 19 中引入的映射变量。

    【讨论】:

    • 我使用的是 OTP 18。当我更新到最新版本的 OTP (20.3) 时,它工作正常。谢谢!
    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2011-06-06
    • 2014-08-05
    • 2015-04-24
    • 1970-01-01
    • 2021-08-18
    相关资源
    最近更新 更多