Позвольте мне задать свой вопрос так же просто, как показано ниже.У меня есть программное обеспечение для сетевого маршрутизатора, встроенное в Erlang, но в конкретном сценарии я наблюдаю очень высокий рост памяти, как показывает VM.
У меня есть один процесс, который получает двоичный пакет от другого процесса из сокета.
Этот процесс анализирует двоичный пакет и передает двоичный пакет gen_server (вызывается handle_cast)
gen_server снова сохраняет некоторую информацию в таблице ETS и отправляет пакет на равноправный сервер.
Когда одноранговый сервер отвечает обратно, запись от ETS удаляется, и gen_server отвечает обратно на первый процесс
Также, если первый процесс (который отправил пакет gen_server) получает тайм-аут через 5 секунд, ожидая ответа от gen_server, он также удаляет запись ETS в gen_server и завершает работу.
Теперь я наблюдаю высокий рост памяти, когда много событий истекает по тайм-ауту (из-за недоступности однорангового сервера) и из того, что я исследовал, это "** двоичные **" и "**process_used ** ", заданный командой erlang: memory, которая использует большую часть памяти.
но то же самое не верно, когда события обрабатываются успешно.