Errno :: ENOMEM: Невозможно выделить память - cat
У меня есть работа на производстве, который обрабатывает XML-файлы. Размер xml-файлов составляет около 4 КБ, а их размер - от 8 до 9 ГБ.
После обработки мы получаем файлы CSV в качестве вывода. Я've команда cat, которая объединит все файлы CSV в один файл I 'Я получаю:
Errno :: ENOMEM: Невозможно выделить память
наcat
(Backtick) команда.
Ниже приведены несколько деталей:
Системная память - 4 ГБОбмен - 2 ГБРубин: 1.9.3p286Файлы обрабатываются с использованиемnokogiri
а также .saxbuilder-0.0.8
Здесь есть блок кода, который будет обрабатывать 4000 XML-файлов, а выходные данные сохраняются в формате CSV (1 на xml) (извините, яЯ не должен делиться этимполитика компании).
Ниже приведен код, который объединит выходные файлы в один файл.
Dir["#{processing_directory}/*.csv"].sort_by {|file| [file.count("/"), file]}.each {|file|
`cat #{file} >> #{final_output_file}`
}
Мы сделали снимки потребления памяти во время обработки. Она потребляет почти всю часть памяти, но она выиграла 'не могу. Это всегда терпит неудачу наcat
команда.
Я думаю, на backtick он пытается раскошелиться на новый процесс, который нене получить достаточно памяти, поэтому он терпит неудачу.
Пожалуйста, дайте мне знать ваше мнение и альтернативу этому.