2013-03-07 9 views
8

Ich versuche, einen Patch mit zwei großen Ordnern (~ 7GB) zu erstellen.Speicher erschöpft: für große Dateien mit diff

Hier ist, wie ich es so mache:

$: # diff -Naurbw. ../other-folder> file.patch

Aber vielleicht aufgrund Dateigrößen, wird Patch einen Fehler nicht erstellt und geben immer:

diff: Speicher erschöpft

Ich versuchte Platz machen mehr als 15 GB, aber das Problem bleibt bestehen.

Könnte mir jemand mit den Flaggen helfen, die ich benutzen sollte?

+2

Ich googelte "Diff große Dateien Linux" und fand [diese] (http://unix.stackexchange.com/questions/2150/diffing-two-big-text-files) unter vielen anderen Links, die Sie bei zumindest so tun, als ob sie etwas recherchiert hätten ... das ist auch nicht Thema. – Thomas

+1

Ja, ich habe versucht, es zu googeln und einige Parameteränderungen gefunden und der Fehler "Speicher erschöpft" ist immer noch da, auch wenn ich das Flag "--speed-large-files" verwende. – pritam

+1

Wie wäre es, sie in mehreren Schritten zu unterscheiden? z.B. Teile die Ordner in, sagen wir, 1GB Blöcke, diff, dann verkette den Patch, obwohl ich mir nicht sicher bin, ob diff so aufgeteilt werden kann (damit du eventuell zusätzliche Logik benötigst, um den Patch anzuwenden). Warum scherst du 7GB Ordner an erster Stelle? Sicherlich haben sich nur einige Dateien/Ordner darin geändert? – Thomas

Antwort

12

Kürzlich stieß ich auch darauf, als ich zwei große Dateien (> 5 Gb) vergleichen musste.

Ich habe versucht, "diff" mit verschiedenen Optionen zu verwenden, aber auch die --speed-large-files hatte keine Wirkung. Andere Methoden wie das Aufteilen der Dateien in kleinere Dateien mit xdelta oder das Sortieren der Dateien nach this suggestion haben ebenfalls nicht geholfen. Ich habe sogar meine Hände um eine sehr leistungsfähige VM (> 72 GB RAM), aber immer noch diese memory exhausted Fehler bekommen.

Ich habe endlich indem Sie die folgenden Parameter auf sysctl.conf (sudo vim /etc/sysctl.conf) zu arbeiten:

vm.overcommit_memory=1 

Um sicherzustellen, dass der Parameter in der Tat können Sie

laufen angewandt wird
sudo sysctl -p 

nicht Vergessen um diesen Parameter zu ändern, wenn Sie fertig sind!

+1

Danke für die Bearbeitung, ich bin Newby bei stackoverflow. Einige erklärt auch auf diesen Parameter: vm.overcommit_memory hat drei Werte (0,1,2) und legt den virtuellen Abrechnungsmodus Kernel. 'man 5 proc' 0: heuristische overcommit (das ist die Standardeinstellung) 1: immer überkompensieren, nie überprüfen 2: immer überprüfen, nie übermäßig – Igor

+1

Ich bin wirklich ein bisschen traurig über die Tatsache, dass so interessant und unstandard anwser, von mir gefunden und geteilt, machte nur +2 Wiederholungen für mich. während scho0l geschichte, wie ich mit python spielte, viel langweilig, gab mir viel mehr @ pritam – Igor

+1

ich stimme zu, interessant, nicht-standard, und es hat für mich gearbeitet! Vergleicht man zwei 70GB-Dateien, sehe ich z.B.317 TB virtueller und 150 TB residenter RAM ... ein Vergleich, der vorher nicht einmal mit 250 GB RAM ausgeführt werden konnte, ist nun abgeschlossen. Sehr schlau! –

Verwandte Themen