Ich führe lsof auf einem meiner Linux-Server aus, um zu überprüfen, ob eine Datei ( /tmp/incoming_data.txt
) im ext3-System von anderen Programmen geöffnet wird. Mein Server hat viele TCP-Verbindungen. Das Seltsame ist, dass die Ausführung von 'sudo lsof' ungefähr zwei Minuten dauert und in diesen zwei Minuten 99x% CPU verbraucht.
Der Befehl, den ich verwendet habe, ist sudo lsof /tmp/incoming_data.txt
. Ich habe " Fixiereinheit " ausprobiert, die ungefähr die gleiche Menge an CPU und Ausführungszeit benötigt. Kann ich dieses Problem beheben?
lsof
? Wie viele Prozesse und Threads haben diese Datei geöffnet? Was ist die CPU-Auslastung, wenn lsof nicht ausgeführt wird?Antworten:
Wenn Sie sicher sind, dass Sie die offenen TCP- oder UDP-Verbindungen überspringen können, können Sie die dialektspezifische Option von lsof verwenden, da Sie erwähnt haben, dass es zu viele davon gibt
-X
.Lesen Sie die Manpage von lsof und suchen Sie nach '-X', um detaillierte Informationen zu erhalten.
quelle
Übergeben Sie die
-n
Option zum Überspringen der Auflösung von DNS-Namen von IP-Verbindungen. Dies wird mit ziemlicher Sicherheit der größte Teil aller Verlangsamungen sein.quelle
Ich habe dieses kleine NPM-Paket gefunden, das lsof für Dateien wunderbar beschleunigt: https://www.npmjs.com/package/lsof-mac-fast .
Ich habe ein Wrapper-Skript erstellt, um es zu verwenden:
Das ist mein Skript:
Das Wiederholungsintervall kann sehr niedrig sein, zB scheinen 10 ms gut zu funktionieren.
quelle