Errno::ENOMEM: Cannot allocate memory - Katze

Ich habe einen job, läuft auf die Produktion, die Verarbeitung von xml-Dateien.
xml-Dateien zählt rund um 4k und von Größe 8 bis 9 GB alle zusammen.

Nach der Bearbeitung bekommen wir CSV-Dateien als Ausgabe. Ich habe eine Katze, wird der Befehl merge werden alle CSV-Dateien zu einer einzigen Datei, die ich immer bin:

Errno::ENOMEM: Cannot allocate memory

auf cat ("Backtick") Befehl.

Unten sind einige details:

  • - System-Memory - 4 GB
  • Swap - 2 GB
  • Ruby : 1.9.3p286

Dateien verarbeitet werden, mit nokogiri und saxbuilder-0.0.8.

Hier, es ist ein block von code, das wird Prozess 4,000 XML-Dateien und die Ausgabe wird gespeichert im CSV-Format (1 pro xml -) (sorry, ich bin nicht davon ausgegangen, teilen Sie es b'coz der Unternehmenspolitik).

Unten ist der code, der die Zusammenführung der output-Dateien zu einer einzigen Datei

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

Habe ich genommen Speicherverbrauch Schnappschüsse während der Verarbeitung.Es verbraucht fast alle Teil des Speichers, aber es nicht scheitern.
Es scheitert ja immer an den cat Befehl.

Ich denke, auf backtick es wird versucht die Gabel ein neues Verfahren, mit dem nicht genügend Speicher, damit es fehlschlägt.

Bitte lassen Sie mich wissen, Ihre Meinung und alternative.

IMO würde es Sinn machen, zu zeigen, was Sie tun.
Ich habe bearbeitet meine post, vielen Dank für Ihre Antwort
Vielleicht sind Sie sehr wenig Speicher für diese zu passieren, sind Sie sicher, Sie haben genug Speicher übrig ist ? Was ist die Ausgabe von free -m ?
Ich Stimme mit Ihnen überein, free-m zeigt kaum 150 MB frei heraus nach der Verarbeitung von rund 3.000 Dateien. Aber, es ist weiterhin die Verarbeitung aller Dateien und schlägt nur auf cat-Befehl.
Das ist normal, Sie haben genug Speicher für die Auflistung aller Dateien und laichen in einer Schale, aber die shell gespawnt wird scheitern, wenn die Katze läuft, dann Schreibe ich eine Lösung für Sie und poste Sie als Antwort

InformationsquelleAutor Atith | 2013-02-26

Schreibe einen Kommentar