Errno :: ENOMEM: No se puede asignar memoria - cat

Tengo un trabajo en ejecución en la producción que procesa archivos xml. Los archivos xml cuentan alrededor de 4k y de tamaño 8 a 9 GB todos juntos.

Después del procesamiento obtenemos archivos CSV como salida. Tengo un comando cat que fusionará todos los archivos CSV en un solo archivo que estoy recibiendo:

Errno :: ENOMEM: No se puede asignar memoria

encat (Backtick) comando.

A continuación se presentan algunos detalles:

Memoria del sistema - 4 GBSwap - 2 GBRuby: 1.9.3p286

Los archivos se procesan utilizandonokogiri ysaxbuilder-0.0.8.

Aquí, hay un bloque de código que procesará 4.000 archivos XML y la salida se guarda en CSV (1 por xml) (lo siento, no se supone que lo comparta por la política de la empresa)

A continuación se muestra el código que fusionará los archivos de salida en un solo archivo.

Dir["#{processing_directory}/*.csv"].sort_by {|file| [file.count("/"), file]}.each {|file|
            `cat #{file} >> #{final_output_file}`
}

Tomé instantáneas de consumo de memoria durante el procesamiento. Consume casi toda la parte de la memoria, pero no fallará. Siempre falla encat mando.

Supongo que, en backtick, intenta unir un nuevo proceso que no obtiene suficiente memoria, por lo que falla.

Por favor déjame saber tu opinión y alternativa a esto.

Respuestas a la pregunta(3)

Su respuesta a la pregunta