2017-10-12 1 views
4

Ich wurde beauftragt, ein Shell-Skript zu schreiben, um Hunderte von Protokolldateien in vielen Verzeichnissen auf Linux- und Solaris-Servern zu durchsuchen. Einige der Protokolle sind in vielen Formaten komprimiert und einige sind einige GB groß. Ich mache mir Sorgen, dass grep viele Ressourcen auf dem Server benutzt und möglicherweise Webserver, die auf dem Rechner laufen, durch Erschöpfen des Arbeitsspeichers (wenn dies wahrscheinlich passieren wird) herunterfährt.Grep Ressourcennutzung

Sollte ich die Dateien dekomprimieren, grep sie und dann erneut komprimieren oder verwenden Sie zgrep (oder gleichwertig), um sie zu durchsuchen, während sie komprimiert sind? Wäre es von Vorteil, eine Methode gegenüber der anderen einzusetzen?

Gibt es auch eine einfache Möglichkeit, die Speichernutzung eines Befehls auf einen Prozentsatz von dem, was derzeit verfügbar ist, zu beschränken?

Wenn jemand erklären könnte, wie die Speichernutzung beim Ausführen dieser Befehle funktioniert, würde das sehr hilfreich sein.

Antwort

4

grep Speicherverbrauch ist konstant; Es skaliert nicht mit der Dateigröße . Es muss nicht die gesamte Datei im Speicher behalten, sondern nur der Bereich, in dem sie gerade durchsucht wird.

Dekomprimierung ist ähnlich. Die Speicherauslastung ist proportional zur Größe des Wörterbuchs und nicht zur Gesamtgröße der Datei. Für die Wörterbuchgröße ist nichts zu befürchten: höchstens ein paar Megabyte.

Ich würde mich nicht um einige einfache grep//zcat | grep Suchen kümmern, die andere Prozesse herunternehmen. Dieses Zeug ist Linux's Brot und Butter.


† Passen des Scannens durch files with incredibly long lines, though. Seine Speichernutzung skaliert mit der Zeilenlänge. Sie können grep -I verwenden, um Binärdateien zu überspringen, was normalerweise ausreichend ist.

+0

Geben Sie auch keine große Musterdatei mit '-f' an. Wahrscheinlich würde es nicht helfen. – stevesliva

Verwandte Themen