Ich erkannte, dass mein awk
Skript mehr und mehr Speicher verwendete, als die Zeit verging, wenn ich nichts im Speicher speichern sollte, also entschied ich mich, einige Tests zu machen.awk match Befehl und Speichernutzung
Dies ist ein sehr einfaches Skript (meins ist größer, aber ich reproduzieren das Problem auf einem sehr einfachen). Mein awk
Skript wird in einem bash
Skript verwendet, die $file
Variable ist die Datei, auf der die awk
ausgeführt wird.
awk '
{
if(match($0,"word"))
{
line=substr($0, RSTART - 20, RLENGTH + 20)
print line
}
}
' "$file"
Wenn ich dieses Skript auf einer großen Datei ausführen, in der jede Zeile word
enthält, die Speicherauslastung des awk
Skript hebt super schnell, noch schneller, wenn ich in eine Datei drucken. Ich muss es stoppen, bevor es meinen Computer einfriert. Hast du eine Idee, was diese große Speichernutzung verursacht? In meinem echten Skript sind die Dateien normalerweise kleiner und die match
Funktion wird nicht wie bei dieser Funktion in jeder Zeile ausgelöst, aber ich würde lieber sicher gehen, dass nichts Falsches passieren wird.
EDIT: Dieses Problem scheint nicht bei der Verwendung von Mawk, nur mit GNU awk, ich habe keine Ahnung, warum.
Nicht sicher, warum Sie "$ file" gesetzt haben, während Sie Input_file erwähnen? Versuchen Sie auch, eine neue Sitzung des Servers usw. zu machen und überprüfen Sie den Speicher und die CPU, indem Sie die Befehle top oder vmstat usw. ausführen, die Ihnen sagen, was im Hintergrund passiert. – RavinderSingh13
Ich überprüft mit Top und die Speicherauslastung ist 4% höher alle 3 Sekunden Update (auf einer 2 GB VM). Wenn ich in eine Datei drucke, kann es alle 3 Sekunden um 12% steigen. Ich habe die von Ihnen erwähnte Eingabedatei nicht verstanden, das Skript läuft auf der Datei, die in der '$ file' -Variablen gespeichert ist. – Whin3
Also in Befehl (was auch immer Sie verwendet haben), um herauszufinden, der hohe Speicher und CPU zeigt es dieses Skript ist dafür verantwortlich? in top oder htop könntest du es nach speicher oder cpu sortieren und sehen, wer schuld ist. Sie haben auch erwähnt, dass die Datei von einer Variablen kommt, stimmen Sie ihr zu, also welche Operationen machen Sie, bevor Sie diese awk aufrufen? Vielleicht müssen wir diese auch kennen, um Ihnen zu helfen. Bitte teilen Sie uns alle Details dazu mit. – RavinderSingh13