Analyse der Leistung von Linux NFS-Servern


22

Ich möchte unseren NFS-Server analysieren, um mögliche Engpässe in unseren Anwendungen aufzuspüren. Auf dem Server wird SUSE Enterprise Linux 10 ausgeführt.

Die Art von Dingen, die ich wissen möchte, sind:

  • Auf welche Dateien wird von welchen Clients zugegriffen
  • Lese- / Schreibdurchsatz auf Client-Basis
  • Durch andere RPC-Aufrufe verursachter Overhead
  • Wartezeit für andere NFS-Anforderungen oder Festplatten-E / A, um einen Client zu bedienen

Ich weiß bereits über die verfügbaren Statistiken Bescheid /proc/net/rpc/nfsdund habe sogar einen Blog-Beitrag geschrieben , der sie ausführlich beschreibt. Was ich suche, ist eine Möglichkeit, tiefer zu graben und zu verstehen, welche Faktoren zur Leistung eines bestimmten Kunden beitragen. Ich möchte die Rolle analysieren, die der NFS-Server für die Leistung einer Anwendung in unserem Cluster spielt, damit ich mir überlegen kann, wie ich sie am besten optimieren kann.


Dies scheint die Art von Dingen zu sein, für die System Tap geschrieben wurde. Die Dokumente sind ein bisschen beschissen, aber ich würde vermuten, dass Sie damit etwas anfangen könnten, um diese Art von Analyse durchzuführen. sourceware.org/systemtap/examples/keyword-index.html
Cian

Antworten:


2

Nur eine Idee, versuchen Sie, NFS-Verkehr mit Wireshark zu schnüffeln. Könnte Ihnen sagen, welcher Benutzer auf welche Datei zugegriffen hat:

tshark -R nfs -i eth0

2

Ich muss sagen, von all den verschiedenen * stat-Dienstprogrammen, die einem zur Verfügung stehen, ist nfsstat bei weitem das Schlimmste! Es gibt Ihnen die Möglichkeit, eine Reihe von Zählern zu betrachten, aber das ist alles. Wenn Sie sie sich zweimal ansehen, müssen Sie herausfinden, um wie viel sich jeder Zähler geändert hat, und wenn Sie die Änderungsrate ermitteln möchten, müssen Sie sie durch die Anzahl der Sekunden zwischen den Abtastwerten dividieren. Um ehrlich zu sein, stammt nfsstat aus vielen Jahren, als die Dinge noch ziemlich grob waren, und wird jetzt von niemandem behindert, der das Ausgabeformat ändern möchte, da es wahrscheinlich viele Dinge kaputt machen würde.

Mit collectl können Sie nfs überwachen. Die Ausgabe von nfsstat ist viel einfacher zu lesen. Was aber noch besser ist, Sie können es stunden- oder tagelang laufen lassen und die im Hintergrund gesammelten Daten wiedergeben. In Bezug auf die Anforderung, zu sehen, welche Prozesse ausgeführt werden, kann collectl auch Prozessdaten erfassen, einschließlich der Anzahl der E / A, die jeder Prozess ausführt, und diese sogar wiedergeben, um die wichtigsten E / A-Benutzer anzuzeigen. Sie können die Top-Funktion auch in Echtzeit verwenden.

Wenn Sie das Disketten-Thema selbst sehen möchten, können Sie dies auch tun und alles in einer koordinierten Anzeige anzeigen.

Check it out ... -Marke


2

collectl (insbesondere das NFS-Subsystem ) ist ein sehr nützliches Dienstprogramm, das für Ihre Analyse nützlich sein kann, aber nicht Ihrer Anforderungsliste entspricht. Mir ist kein Linux-Dienstprogramm bekannt, das dies tut.

(Bitte lassen Sie mich diesen nicht themenbezogenen Hinweis hinzufügen: Es gibt Software, die Ihren Anforderungen entspricht: DTrace-basierte Analysen von Sun (pdf) - leider nicht für Linux verfügbar. In Brendan Greggs Blog finden Sie viele großartige Beispiele, die dies veranschaulichen die Fähigkeiten dieses Tools.)



1

Meiner Meinung nach hebt dies genau das Problem mit den heutigen Werkzeugen hervor. Hier werden mindestens 3 erwähnt, einschließlich nfsstat, iostat und iotop. Dann wurde immer wieder von Wireshare und NFSreplay gesprochen. Klingt das wirklich nach einer normalen Vorgehensweise? Abgesehen davon, dass wireshark eine eigene Kategorie hat, bevorzugen Sie nicht 1 Tool?

Obwohl ich die Ausgabe von iostat für sehr nützlich halte, ist es für Opener zu schwierig, mit all diesen .00 in den Zahlen zu lesen. Collectl meldet die exakt gleichen Daten, formatiert sie jedoch augenschonender. Sie wissen bereits, was ich von nfsstat halte, und da collectl alle Daten wiedergeben kann, ist kein Dienstprogramm zum Wiederholen erforderlich. Was 'iotop' betrifft, kann collect auch Prozesse anzeigen, die nach E / A sortiert sind.

Dort haben Sie auch alles, einschließlich Zeitstempel. Wenn Sie ein feineres Überwachungsintervall benötigen, können Sie die Abtastung immer auf 0,1 oder 0,5 Sekunden oder irgendetwas dazwischen zurückdrehen, obwohl Sie mehr Overhead erzeugen, wenn Sie Prozesse so schnell überwachen, wie dies bei jedem Dienstprogramm zur Prozessüberwachung der Fall wäre.

UND der letzte Bonus ist alles, was Sie mit collectl sammeln, das Sie in eine Tabelle laden und einfach plotten ODER colplot verwenden können, das Teil von collectl-utils ist.

-Kennzeichen


1

Vielleicht möchten Sie es nfswatchunter http://nfswatch.sourceforge.net versuchen

Beispiele für die Ausgabe finden Sie unter http://prefetch.net/blog/index.php/2009/06/16/monitoring-nfs-operations-with-nfswatch/

nfswatchist ein bisschen wie top(obwohl ich nicht sicher bin, ob es einen Batch-Modus gibt). Sobald es ausgeführt wird, können Sie die Anzeige ändern, indem Sie eine Taste drücken (z. B. "c", um NFS-Clients anzuzeigen, die Ihren NFS-Server verwenden).

In meinen kurzen Tests nfswatchscheint es jedoch nicht mit NFSv4 zu funktionieren.


1
Interessanter Vorschlag. Der Autor selbst gibt an, dass NFSv4 nicht unterstützt wird und das Tool seit ca. 3 Jahren nicht mehr aktualisiert wurde. Schade, da es von großem Nutzen wäre!
Tonin

1

Ich habe im Moment keine besseren Antworten, aber Sie können Disk IO ziemlich genau mit verfolgen

iostat -mx <delay in sec.> <devices>

Es gibt sehr nützliche Zahlen, insbesondere die durchschnittliche Warteschlangengröße und die Wartezeit (in ms) für Ihre E / A. Es lässt sich leicht erkennen, ob es sich bei Ihren Festplatten um einen Engpass handelt und ob es sich um eine E / A-Anzahl oder einen Durchsatz handelt.

Dann mit

netstat -plaute | grep nfs

Sie sehen die Clientverbindungen und die von jedem Client übertragenen Bytes in Echtzeit. Schleife für kontinuierliche Daten. Es wäre ziemlich einfach, ein Skript zu erstellen, das kontinuierliche Daten liefert ... ich arbeite daran :)

Um IO pro Prozess zu erhalten, können Sie jetzt das ausgezeichnete iotop verwenden . Sie müssen jedoch noch einen Weg finden, um nfsd-Prozesse mit den Clients abzugleichen.

Ich weiß nicht, auf welche Dateien von welchem ​​Client zugegriffen wird. Tatsächlich werden Dateien, die aktuell von einem NFS-Client gelesen / geschrieben werden, nicht einmal in der lsof-Ausgabe angezeigt.

Verwenden Sie watch -d, um den Status des Netzes zu erweitern und zu sehen, wie sich die Dinge ändern und nach Host sortieren

watch -d "netstat -plaute | grep nfs | sort -k 4,5"

Dies ist die beste Lösung, die ich bisher gefunden habe, um herauszufinden, welcher Host den Datenverkehr auf NFS verursacht. Dann kann ich zum Client gehen, um herauszufinden, auf welche Datei zugegriffen wird. Vielen Dank!
Peschü

0

Vielleicht möchten Sie nfsreplay ausprobieren. Es könnte Ihnen helfen, herauszufinden, was passiert. Vielleicht finden Sie auch die Informationen und Links hier nützlich

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.