2016-09-15 3 views
0

Каждый раз, когда я выдаю запрос, часть моей памяти съедается и никогда не восстанавливается. Если я выдаю тот же запрос, больше памяти будет использовано.Почему потребление памяти растет каждый раз, когда я запрашиваю mnesia?

Например, если я выполняю этот запрос (а затем конвертировать записи в карты):

CatchAll = [{'_', [], ['$_']}], 
mnesia:dirty_select(read_store, CatchAll) 

Edit: извините изображение было совершенно неправильно - это показывало процессы не запрашивает

+0

На каком языке? Можете ли вы заставить GC (при условии, что он использует один)? Иначе это может быть утечка в их части. – Carcigenicate

+0

Erlang. Я не думаю, что смогу это сделать ... – drozzy

+0

Извините, я ничего не знаю об Эрланге. Если он использует GC, возможно, есть какой-то способ заставить его работать. Стоит попробовать. – Carcigenicate

ответ

0

проблема заключалась в том, что я хранили строки вместо двоичных файлов в таблицах mnesia.

Результатом запроса HTTP является строкой:

httpc:request(get, {Url,[]}, [{timeout, ?TIMEOUT}], [])

Тем не менее, можно изменить его на двоичный вместо:

httpc:request(get, {Url,[]}, [{timeout, ?TIMEOUT}], [{body_format, binary}])

Это позволило уменьшить объем памяти путем по меньшей мере в 20 раз.

Смежные вопросы