[erlang] Падение производительности при межнодном обмене
От: Аноним  
Дата: 07.08.09 16:59
Оценка:
На одной ноде запущено 10К процессов.
При запуске процесса делается задержка в интервале 1-15 секунд.

init([Id]) ->
...
{ok,State,InitialDelayMs}


По таймауту (15 sec) вызывается метод с другой ноды по сети (1Gbit).
Получаем примерно 600 сообщений в секунду.

handle_info(timeout, State) ->
    Msg = term_to_binary([{start,os:timestamp()}]),
    Reply = gen_server:call({srv,node1@host2},{ping,Msg}),
    FullMsg = [{end,os:timestamp()} | binary_to_term(Reply)],
    ets:insert(test, {Id, FullMsg})
...


Обработчик srv.
handle_call({ping,Msg}, From, State) ->
    spawn(fun() -> gen_server:reply(From, Msg) end,
    {noreply, State};



Отдельный метод считает статистику (timer:now_diff(end,start) ) и выводит три значения: min, max, median.
Проблема в том что постепенно время вызова метода с другой ноды по этим значениям начинает увеличиваться.
В чем грабли? Откуда идет увеличение времени? Не могу сообразить
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.