
Wir haben einen Cronned-Job auf einem Produktionswebserver, der das Tarieren von Dateien aus dem gesamten Dateisystem erfordert. Er läuft etwa 105 Minuten, und während dieser Zeit beginnt Apache mit dem Swapping, da das Lesen von mehreren Gigabyte an Dateien den Speicher für den Dateisystem-Cache erweitert hat.
Die Daten, die Tar liest, müssen nicht im Dateisystem-Cache gespeichert werden. Sie werden in die Tar-Datei übertragen und das war’s. Gibt es etwas, wo wir so etwas sagen können tar cvf whatever/ --no-system-file-buffer-reads
? Meine Lektüre von man tar
hat nichts ergeben, was helfen könnte.
Sie müssen nicht darauf hinweisen, dass dies als eine „Doc, es tut weh, wenn ich so mache! Also machen Sie das nicht“-Situation angesehen werden kann. Irgendwie müssen wir Dateien in eine Tar-Datei kopieren, also ist es keine Option, das nicht zu tun.
Antwort1
Ich denke, das wurde beantwortetHier:
Dort ist dernocacheDienstprogramm, das einem Befehl wie ionice und nice vorangestellt werden kann. Es funktioniert, indem eine Bibliothek vorgeladen wird, die
posix_fadvise
dasPOSIX_FADV_DONTNEED
Flag zu allen offenen Aufrufen hinzufügt.Einfach ausgedrückt teilt es dem Kernel mit, dass für diese bestimmte Datei kein Cache benötigt wird. Der Kernel wird die Datei dann normalerweise nicht im Cache speichern. SieheHierfür die technischen Details.
Es wirkt Wunder bei großen Kopieraufträgen. Wenn Sie beispielsweise eine mehrere Terabyte große Festplatte im Hintergrund sichern möchten, ohne dass dabei die Auswirkungen auf Ihr laufendes System zu sehr beeinträchtigt werden, können Sie parallel etwas unternehmen
nice -n19 ionice -c3 nocache cp -a /vol /vol2
.