Am Montag, den 12.06.2006, 15:42 +0200 schrieb David Haller:
Am Son, 11 Jun 2006, Ralph Müller schrieb:
Mittels Archive::Tar erzeuge ich tar.gz-Archive. 20 Minuten gehts ohne Probleme, dann kommt das Skript aber in die Situation, in der es ein Archiv aus 5 Dateien mit zusammen 65 MB erzeugen soll. In diesen Sekunden schwillt /proc/loadavg auf über 6 an, in /var/log/messages erscheint ein einfacher Hinweis a la "highmem: empty", und das Skript bricht ab, und hoppla, "Getötet" steht in der letzten Zeile. (Letzteres ist keine Ausgabe des Skriptes.)
Zeig mal her wie du Archive::Tar verwendest.
Konzentriert auf das Problem sieht das so aus: #!/usr/bin/perl use File::Find; use Archive::Tar; $tar = Archive::Tar->new(); find ({wanted => \&scan, postprocess => \&compress}, "/tmp"); sub scan { if (-f) { print "Sammele Datei \"$File::Find::name\" ein.\n"; $tar->add_files($File::Find::name); } } sub compress { $tar->write("/tmp/backup.tgz",1); # Archiv auf Festplatte schreiben } exit; Irgendwie scheint Archive::Tar eine andere (ressourcenfressendere) Arbeitsmethode zu benutzen als /bin/tar, weil bei /bin/tar tritt _dieses_ Problem nicht auf. Meine vorherige "Lösung" mit /bin/tar sah übrigens im Prinzip so aus: $stdErr = qx{tar -c -z -f "/tmp/backup.tgz" datei1.txt datei2.txt datei3.txt 2>&1 1>/dev/null}; Wenn man File::Find über mehrere Verzeichnisse iterieren läßt und pro Verzeichnis eine Datei backup.tgz generieren läßt, funktioniert /bin/tar nur dann zuverlässig, wenn ich eine Pause (sleep) von 2-3 Sekunden zwischen einzelnen qx-Befehlen (Verzeichnissen) einbaue. (Ansonsten wird ohne Fehlermeldung einfach die ein oder andere Datei backup.tgz ausgelassen.) Daher vermute ich vielleicht die etwas zu langsame Festplatte als Fehlerursache? Hmm, ich probiere gleich mal aus ob es mit Archive::Tar geht wenn ich (viel) mehr Swap zur Verfügung stelle. Immerhin hätte ich dann eine Gewißheit, daß es an der Speichergröße liegt bzw. an den Speicheranforderungen von Archive::Tar. (Ist auf jeden Fall ärgerlich.) LG, Ralph