Где-то один гигабайт за час-полтора, но иногда быстрее
Тогда спокойно можешь без паники выяснить, где место
Да, я знаю в каком процессе это происходит) Просто вот думаю лучше давать рантайму самому разобраться или поставить fullsweep_after или gc дёргать по таймауту
Если процесс твой, а не из third-party зависимости, можно включить hibernate по таймауту, по сути это fullsweep, только тогда когда процесс простаивает.
Да, я думал так сделать, но процесс не простаивает
в зависимости от того, чем занят процесс, может быть полезнее не по таймауту, а явно после обработки данных. Например, приняли данные — обработали данные — отослали данные дальше (в т.ч. gen:reply) — явный GC. На постоянном потоке одинаковых мелких сообщений это не имеет смысла, лучше fullsweep_after
Он прям на потоке сидит, что даже пяти секунд нет на то чтобы память почистить?.. Может, тогда часть операций, которые генерируют больше всего аллокаций, вынести в короткоживущие процессы-сателлиты, которые просто по окончанию операции будут падать и вместе со всем своим хипом собираться, вместо чёса сборщиком мусора?
Вот это тоже хороший вариант. Процесс сидит на вебсокете и довольно часто (раз в 1-2 секунды) отправляет данные в обе стороны
Часто :) (Сорян, у меня профдеформация от ~сотен событий в секунду)
Да, один процесс не часто) Но таких процессов около 10 тыс, и суммарно они все довольно редко GC делают
Да, на такой нагрузке должно хорошо сработать GC после каждого сообщения
bandit
Да там и hibernate сработает
это не помогло? ERL_FULLSWEEP_AFTER 20
Обсуждают сегодня