Kann das "du" -Programm weniger aggressiv gestaltet werden?

21

Wir haben eine regelmäßige Aufgabe, die duZusammenfassungen einer Reihe von Unterverzeichnissen durchführt, die schlimmsten Straftäter heraussucht und anhand der Ergebnisse ermittelt, ob es Dinge gibt, die schnell zunehmen, um potenzielle Probleme zu erkennen. Wir verwenden diffSchnappschüsse, um sie zu vergleichen.

Es gibt ein Verzeichnis der obersten Ebene mit einigen hundert Unterverzeichnissen, von denen jedes Zehntausende von Dateien (oder mehr) enthalten kann.

Ein " du -s" in diesem Zusammenhang kann sehr IO-aggressiv sein und dazu führen, dass unser Server seinen Cache nicht mehr unterstützt und dann massive IO-Spikes auftreten, die eine sehr unerwünschte Nebenwirkung sind.

Welche Strategie kann verwendet werden, um dieselben Daten ohne die unerwünschten Nebenwirkungen zu erhalten?

Danny Staple
quelle
9
In Deutschland können Sie es durch "Sie" ersetzen.
Federico Poloni

Antworten:

28

Schauen Sie sich an ionice. Von man ionice:

Dieses Programm legt die io-Scheduling-Klasse und -Priorität für ein Programm fest oder ruft sie ab. Wenn keine Argumente oder nur -p angegeben werden, fragt ionice die aktuelle io-Scheduling-Klasse und -Priorität für diesen Prozess ab.

Um dumit der "Leerlauf" -E / A-Klasse zu arbeiten, die die niedrigste verfügbare Priorität hat, können Sie Folgendes tun:

ionice -c 3 du -s

Dies sollte verhindern du, dass die E / A anderer Prozesse gestört werden. Möglicherweise möchten Sie das Programm auch erneut starten, um die CPU-Priorität zu verringern.

renice -n 19 "$duPid"

Sie können auch bei der Initialisierung beides tun:

nice -n 19 ionice -c 3 du
Chris Down
quelle
5
Um ein bestehendes Programm zu ändern, müssen Sie renicestatt aufrufen nice. Suchen Sie sich dusowohl mit ionice und schön, können Sie die Kette beide Programme: nice -n19 ionice -c3 du.
Jofel
niceDies wirkt sich auch auf die Priorität des E / A-Schedulers aus, nicht nur auf die CPU.
Jordanien
1
@jordanm Soweit ich weiß (zumindest unter Linux), nicewirkt sich dies nur auf die Prozessorqualität aus (was sich indirekt auf die E / A auswirken kann, aber nicht auf die Priorität des E / A-Schedulers auswirken sollte). Wo sehen Sie dieses Verhalten? Ist es irgendwo dokumentiert?
Chris Down
@ ChrisDown - Ich erinnere mich, es in Understanding the Linux Kernel
gelesen zu haben
@jordanm Hm, ich habe das Buch. Ich habe einen kurzen niceBlick darauf geworfen und nur Seite 263 gefunden, die explizite Details dazu enthält , und es geht nur um CPU-Basiszeitquanten. Hast du eine Ahnung, wo es in dem Buch war? Ich würde interessiert sein , um eine maßgebliche Quelle zu lesen , dass die Staaten es, sie nicht in die Rede ist man nice, man 2 nice, man 2 setpriority, info niceoder info 'nice invocation', soweit ich kann sagen, was da einige dieser Sprung in ziemlich viel Detail , wie die seltsam niceAufruf funktioniert und was es macht.
Chris Down
4

Wenn Sie in einem einzigen Verzeichnis Unmengen von Dateien haben, kann dies für E / A-Spitzen verantwortlich sein, da viele Dateisysteme große Dateibäume in einem einzigen Verzeichnis nicht gut verarbeiten. Eine Aufteilung in mehrere Unterverzeichnisse kann hier Abhilfe schaffen. Wenn Sie mehr als 10.000 Dateien in einem Verzeichnis haben und dies Probleme verursacht, sollten Sie es wahrscheinlich aufteilen.

Was die Nachverfolgung der Datenträgernutzung angeht, können Sie zunächst einen Blick darauf werfen df. Wenn der Nutzungswert dort nicht schnell angestiegen ist, haben es auch die Subdirs nicht getan, und Sie können den gesamten Vorgang überspringen du.

Eine andere Alternative kann ein Festplattenquotensystem sein, das die Nutzung kontinuierlich verfolgt, sofern Ihr Dateisystem dies unterstützt.

Frostschutz
quelle
Das System ist eine Buildfarm, daher hängt die Anzahl der Dateien in einem Verzeichnis von den Entwicklern der von uns erstellten Komponenten ab. dfwürde nicht ganz funktionieren - das Problem ist, dass wir Bereinigungsskripte haben, so dass wir möglicherweise keine Änderung sehen, aber eine frühe Warnung für einen automatischen Job verpasst haben, der aggressiv Speicherplatz beansprucht. Wir verwenden zabbix, um die Gesamtbelegung der Festplatte zu überwachen, aber es ist ziemlich wichtig, die einzelnen Verzeichnisse zu kennen, in denen die Dinge ein bisschen verrückt werden.
Danny Staple
0

Außerdem ionicekönnen Sie versuchen, die Datenträgerzugriffe effizienter zu gestalten. Dies kann durch Ausführen versucht werden

find /du/root -printf ""
find /du/root -perm 777 -printf ""

zuerst (vielleicht auch durch ionice). Es funktioniert nicht, wenn zu viele Dateien vorhanden sind. Wie viele zu viele sind, hängt von der Größe des freien Arbeitsspeichers ab.

Hauke ​​Laging
quelle