Вы можете легко проверить поведение Erlang VM в этой ситуации. В оболочке:
F = fun F() -> receive done -> ok end end,
P = spawn(F),
G = fun G(Pid,Size,Wait) -> Pid ! lists:seq(1,Size), receive done -> ok after Wait -> G(Pid,Size,Wait) end end,
H = fun(Pid,Size,Wait) -> T = fun() -> G(Pid,Size,Wait) end, spawn(T) end,
D = fun D() -> io:format("~p~n~p~n",[erlang:time(),erlang:memory(processes_used)]), receive done -> ok after 10000 -> D() end end,
P1 = spawn(D).
P2 = H(P,100000,5).
Вы увидите, что вы получаете исключение выделения памяти, виртуальная машина записывает дамп ядра и вылетает.
Я не проверял, как изменить ограничения, если вы проведете пробную версию, вы увидите, что для этого нужно достичь очень большого количества сообщений, используя десятки гигабайт памяти в почтовом ящике.
Если вы когда-нибудь попадете в такую ситуацию, я не думаю, что первое Реакция заключается в увеличении размера, вам нужно сначала поискать
- непрочитанных сообщений,
- узкое место процесса
- архитектура приложения
- адаптировано для Erlang ваша проблема
- ...