Der Befehl du dauert viel zu lange

9

Ich laufe du -shin einer Vielzahl von Verzeichnissen, um Disk Hogs zu finden. Ich habe zwei identische Server (Dell PE2850s), beide mit RHEL5, und es wird erheblich länger dauern, bis sie duauf einem Server über dem anderen ausgeführt werden.

du -sh /opt/foobarAuf Server A (mit ca. 25 GB) dauert dies beispielsweise 5 Minuten, und auf Server B meldet sich derselbe Befehl mit der gleichen Datenmenge fast augenblicklich an mich. Ich sehe nichts Auffälliges, wenn ich oben renne usw.

Jeder Rat wird sehr geschätzt.

Jon Weinraub
quelle
3
Die Geschwindigkeit von du -shängt nicht von der Größe der Daten ab, sondern von der Anzahl der Dateien. Haben beide Verzeichnisbäume eine ähnliche Anzahl von Dateien?
Ladadadada
2
Funktioniert außerdem duviel schneller, wenn alle Verzeichnis-Metadaten (z. B. Dateigrößen) derzeit zwischengespeichert werden. Wenn dies aus irgendeinem Grund auf einem Server und nicht auf dem anderen der Fall ist, führt dies zu großen Unterschieden.
Sven
@Ladadada Ich würde sagen, ja, es gibt ungefähr die gleiche Anzahl von Dateien. Selbst wenn Sie das Sternchen hinzufügen, um eine Liste der Dateigrößen einzeln zu erhalten, dauert das Scrollen lange. Ich bin mir jedoch nicht ganz sicher, wie ich überprüfen soll, ob die Metadaten zwischengespeichert sind oder nicht.
Jon Weinraub

Antworten:

6

Wenn sich in diesem Verzeichnis eine große Anzahl von Dateien befindet und sich der Inhalt des Verzeichnisses ständig ändert, wird der Verzeichniseintrag selbst im Laufe der Zeit fragmentiert. Wenn das Betriebssystem dann den Verzeichnisinhalt liest, gibt es viele, viele unnötige Festplattensuchen. Dies geschieht insbesondere bei ext * -Dateisystemen (ext4 könnte jedoch besser sein) und den alten ReiserFS v3.x-Dateisystemen (wenn diese zu 85% voll sind oder so).

Die Lösung ist ganz einfach:

cp -pr origdir newdir
mv origdir origdir.bak
mv newdir origdir

Wenn alles im RAM zwischengespeichert ist, spielt dies natürlich keine Rolle. Normalerweise speichert Linux häufig aufgerufene Dateien und Verzeichnisse ziemlich aggressiv zwischen. Wenn Sie den Inhalt dieser Verzeichnisse wirklich im RAM behalten möchten, können Sie ls -lah /your/dir 2>&1 >/dev/nullIhrem Cron so etwas wie etwas hinzufügen.

EDIT: Oh, eine Sache kam mir in den Sinn. Wenn Ihr Server über einen batteriegepufferten RAID-Controller mit einem Cache verfügt, überprüfen Sie, ob der Akku in Ordnung ist. Ich habe Situationen gesehen, in denen der Akku leer ist und der Controller den Cache vollständig deaktiviert, was die Leistung sehr beeinträchtigt. Beispielsweise können HP Server in den iLO-Protokollen etwas über den Controller-Akku sagen. Im eigentlichen Server Health Dashboard scheint alles in Ordnung und grün zu sein, aber nur der Protokolleintrag informiert Sie darüber.

Janne Pikkarainen
quelle
1
Dies wird wahrscheinlich einige Zeit in Anspruch nehmen. Es befindet sich auf einem Produktionsserver, daher muss ich es über Nacht tun. Das gesamte Verzeichnis enthält mehrere hundert Gigabyte Daten, damit ich es nicht blockieren kann. Ich werde berichten morgen früh als erstes. Danke für die Idee.
Jon Weinraub
Ich führe diesen Befehl immer noch aus und weiß nicht, wie lange es dauern wird. Ich habe es sogar überarbeitet und cp läuft noch, seit dem Start ungefähr 1 Stunde und 15 Minuten. Sogar das Ausführen eines Du in diesem Ordner in einer anderen Shell hat lange gedauert, aber Sie denken, ich sollte nur umountdas Laufwerk und fsckes?
Jon Weinraub
Lass es einfach laufen, es sei denn, es stört deine Produktion irgendwie. Mit RHEL5 und seinem Standard-CFQ-E / A-Scheduler können Sie den Befehl cp in die Leerlaufklasse einfügen, damit die anderen Prozesse nicht gemobbt werden: ionice -c3 -p $(pidof cp)oder so.
Janne Pikkarainen
Bitte lesen Sie auch meine letzte Bearbeitung.
Janne Pikkarainen
1
Ich weiß, dass es eine Weile her ist, aber ich bin endlich dazu gekommen, den von Ihnen erwähnten Befehl cp auszuführen. Das Kopieren von 25 GB dauert zwei bis zwei Stunden. Nach dem Zug war es genauso langsam, ein weiteres Du-Sh zu laufen. Tatsächlich ist auch das Löschen des Sicherungsverzeichnisses langsam!
Jon Weinraub
0

Ich schlage vor, den einfachen Befehl du ohne Schalter auszuprobieren. Sie werden schließlich sehen, welches Verzeichnis den Prozess verlangsamt. Könnte eine fehlerhafte Festplatte sein oder ein anderer Grund, ...

Király István
quelle