Я написал сценарий для рекурсивной загрузки через контейнеры облачных контейнеров Rackspace и получения копии каждого файла, поэтому у меня есть локальная резервная копия, если Rackspace попадает в метеоры и/или hindenbugs.Ошибка утечки памяти тумана
Однако мой сценарий, по-видимому, пропускает память в линейном масштабе при загрузке моих файлов.
В принципе у меня есть метод, который выглядит следующим образом:
def download_file(fog_file, destination_path)
data = fog_file.body
File.open(destination_path, 'w') { |f| f.write(data) }
end
Я понимаю, что в связи с характером тумана, я не могу избежать загрузки всего файла в память, но я бы предположил, что Руби освободить память (или иметь возможность выпускать память) после каждого вызова download_file
. В конце концов, переменная data
выходит за рамки.
К сожалению, когда я смотрю на мой системный мониторинг, использование памяти просто увеличивается с линейным темпом до тех пор, пока не расходует всю доступную память, после чего сбой сценария.
Что я здесь делаю неправильно?
Я использую Ruby 2.1.2 на Ubuntu.
Не знаете, почему вы просачиваетесь (сохраняете ли вы ссылку на fog_file?), Но вы можете загружать файлы с загрузкой тумана (см. Http://www.kylev.com/2013/05/14/foggy-sponges-and- котята/например) –
Ruby построил сборку мусора после do/end блока относительно File.open. Попробуйте явно закрыть файл и посмотреть, поможет ли это. – Anthony