Почему происходит утечка памяти после загрузки больших файлов в Ruby? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть какой-то Ruby, который загружает большой XML-файл (~ 380 МБ).

Я использую on_body для загрузки его кусками:

to = File.open('/path', 'wb')

http = HTTPI::Request.new(options)
http.url   = uri
http.on_body { |chunk| to.write(chunk) }

HTTPI.get(http, :net_http)

to.close

on_bodyв соответствии с документацией (https://www.rubydoc.info/gems/httpi/HTTPI/Request#on_body-instance_method) будет читать ответ кусками, чтобы предотвратить заполнение памяти.

Кажется, это работает, на практике мое использование памяти увеличивается примерно на ~ 178 МБ после загрузкифайл, поэтому некоторая сборка мусора может происходить во время потоковой передачи файла, иначе я бы ожидал, что он прыгнет на полный размер файла.

Однако, после этого, 178 МБ просто зависает вечно.

Я сузил его до того, что это связано с загрузкой файла.Если я прочитал тот же XML-файл с диска, объем памяти увеличился примерно на 4 МБ после того, как я закончил обработку файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...