Wir haben ein sehr großes (Multi-GB) Nginx-Cache-Verzeichnis für eine ausgelastete Site, das wir gelegentlich auf einmal löschen müssen. Ich habe dies in der Vergangenheit gelöst, indem ich den Cache-Ordner in einen neuen Pfad verschoben, einen neuen Cache-Ordner am alten Pfad erstellt und dann rm -rf
den alten Cache-Ordner erstellt habe.
In letzter Zeit, wenn ich den Cache an einem geschäftigen Morgen leeren muss, rm -rf
hungert die E / A von meinen Serverprozessen nach dem Festplattenzugriff, da sowohl Nginx als auch der Server, für den es verfügbar ist, leseintensiv sind. Ich kann den Anstieg des Lastdurchschnitts beobachten, während die CPUs im Leerlauf sitzen und rm -rf
98-99% der Festplatten-E / A aufnehmen iotop
.
Ich habe es ionice -c 3
beim Aufrufen versucht rm
, aber es scheint keine nennenswerte Auswirkung auf das beobachtete Verhalten zu haben.
Gibt es eine Möglichkeit zu zähmen rm -rf
, um die Festplatte mehr zu teilen? Muss ich eine andere Technik verwenden, die sich an ihnen orientiert ionice
?
Aktualisieren:
Das betreffende Dateisystem ist ein AWS EC2-Instanzspeicher (die primäre Festplatte ist EBS). Der /etc/fstab
Eintrag sieht folgendermaßen aus:
/dev/xvdb /mnt auto defaults,nobootwait,comment=cloudconfig 0 2
Antworten:
Alle auf dieser Seite gesammelten Daten. Im Folgenden finden Sie einige Optionen zum Löschen eines großen Dateiverzeichnisses. In der Beschreibung finden Sie Einzelheiten dazu, wie dies hergestellt wurde.
* cs1 ist ein freiwilliger und unfreiwilliger Kontextwechsel
quelle
rsync
läuft gerade. Vielleicht ist es zu früh, um es zu sagen, und es könnte geholfen werden, dass ich es nicht mitten in einem geschäftigen Morgen laufen lasse, aber der Server reagiert immer noch und der Lastdurchschnitt ist überschaubar.ionice -c 3 nice -19 rsync -a --delete /mnt/empty/ /mnt/nginx-cache-old
nice
und zu sein scheintionice
, oder zumindest den Server nicht so zerstört hat wie errm -rf
.Durch das Entfernen von Dateien werden nur Metadatenoperationen im Dateisystem ausgeführt, die nicht von ionice beeinflusst werden.
Der einfachste Weg wäre, wenn Sie den Speicherplatz gerade nicht benötigen, dies außerhalb der Spitzenzeiten durchzuführen
rm
.Die komplexere Art und Weise, wie MIGHT arbeiten könnte, besteht darin, die Löschvorgänge über die Zeit zu verteilen. Sie können Folgendes versuchen (beachten Sie, dass Ihre Pfade und Dateinamen KEINE Leerzeichen enthalten!):
Beachten Sie auch, dass Sie
rm -f
den ersten Befehl nicht verwenden können, da die Schleife dann nicht gestoppt wird (dies hängt vom Fehler-Exit-Code ab,rm
wenn kein Argument vorhanden ist).Sie können es optimieren, indem Sie die Anzahl der Löschvorgänge pro Zyklus (im Beispiel 100) und die Schlafdauer ändern. Es funktioniert jedoch möglicherweise nicht wirklich, da das Dateisystem die Metadatenaktualisierungen möglicherweise immer noch so zusammenfasst, dass Sie Probleme mit Ihrer E / A-Last bekommen. Sie müssen es nur versuchen.
quelle
while
Schleife scheint den Trick zu tun, wennhead -n 50
. 100 erhöhte den Lastdurchschnitt immer noch langsam über den kritischen Wert, was mir sagt, dass zu viele Ressourcenkonflikte vor sich gingen.Sie können es mit dem Befehl "nice" koppeln.
ionice -c 3 nice -19 rm -rf /some/folder
Dies ändert die Priorität des Prozesses auf der Maschine.
quelle
nice
scheint es ungefähr so viel Wirkung zu haben, wieionice
nichts nennenswertes.rm -rf
99% eingeschaltet wariotop
.