Как собрать мусор в Elixir REPL, iex?

В python, если я играю с REPL, я могу принудительно собрать мусор с помощью import gc; gc.collect(). Как мне сделать то же самое с iex REPL Эликсира?

Пример перед привязкой большой переменной:

введите здесь описание изображения

Таким образом, используется около 700 МБ оперативной памяти и 300 МБ подкачки.

После привязки больших данных к переменной xx (выбирает из базы данных 500 таймсерий по 7000 структур каждая):

введите здесь описание изображения

Итак, теперь используется около 2,2 ГБ с свопом 500 МБ. Теперь перепривязываем xx к чему-то маленькому:

введите здесь описание изображения

Но используемая память практически не изменилась. По-прежнему 2,2 ГБ ОЗУ и около 500 МБ подкачки. Однако, если я выйду из IEX: введите здесь описание изображения

Вернемся к использованию менее 400 МБ оперативной памяти. Таким образом, привязка больших данных, которая была перепривязана, не была собрана в iex. Как я могу заставить его сделать это?


person Thomas Browne    schedule 31.03.2021    source источник


Ответы (1)


Информация об этом есть здесь: https://erlang.org/doc/apps/erts/GarbageCollection.html

Может быть, просто попробуйте сделать:

:erlang.garbage_collect()
person Peaceful James    schedule 01.04.2021