Inhalt

Einleitung

Voraussetzungen

Anforderungen

Verwendete Komponenten

Hintergrundinformationen

Fehlerbehebung bei NSO-Leistungsproblemen

PERF installieren

Abfragen der Daten

Flammendiagramm erstellen

Durchsuchen des Flammendiagramms

Zugehörige Informationen

Einleitung

In diesem Dokument wird beschrieben, wie Sie das Perf-Tool auf NSO-Hosts verwenden, um Leistungsprobleme zu untersuchen.

Voraussetzungen

Anforderungen

Cisco empfiehlt, dass Sie über Kenntnisse in folgenden Bereichen verfügen:

- Grundlegende Linux-/Unix-Befehlszeilenverwendung

- NSO-Systemarchitektur und -betrieb (Network Services Orchestrator)

- Konzepte für CPU-Profilerstellung und -Analyse

- Vertrautheit mit Leistungsproblem-Problembehebungs-Workflows

Verwendete Komponenten

Die Informationen in diesem Dokument basierend auf folgenden Software- und Hardware-Versionen:

- NSO-System oder lokale Installation auf einem unterstützten Unix/Linux-Host

- Linux Distributionen wie Ubuntu, Debian, Fedora oder RedHat Derivate

- perf-Tool (Linux Performance Analysis Tool)

Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die möglichen Auswirkungen aller Befehle kennen.

Hintergrundinformationen

Perf ist ein leistungsstarkes Tool zur Leistungsanalyse in Linux, das hauptsächlich für die CPU-Profilerstellung verwendet wird. Es bietet Einblicke in die aktuelle Arbeitsweise der CPU, indem es die Last untergeordneter Funktionen erfasst und analysiert. Dies hilft bei der Identifizierung von Funktionen oder Prozessen, die die CPU belegen, und ist für die Ermittlung von Performance-Engpässen unerlässlich.

Perf kann auch Flammendiagramme erzeugen, die spezielle Diagramme sind, die visuell darstellen, welche Teile eines Programms die meiste CPU-Zeit verbrauchen. Flammendiagramme erleichtern das Auffinden von Codebereichen, die optimiert werden müssen.

Wichtig ist, dass die Leistung entsprechend den Empfehlungen der Geschäftseinheit des NSO auch in der Hauptprüfliste für die Datensammlung bei "Out of Memory" (OOM)-Fällen enthalten ist. Detaillierte Anleitungen zur Fehlerbehebung bei OM-Problemen erhalten Sie beim Cisco TAC.

Fehlerbehebung bei NSO-Leistungsproblemen

In diesem Abschnitt wird ein umfassender Workflow für die Installation, Verwendung und Analyse von Daten aus dem perf-Tool auf NSO-Hosts beschrieben, um Leistungsprobleme zu beheben.

PERF installieren

Schritt 1: Installieren Sie perf auf Ihrer Linux-Distribution. Verwenden Sie den entsprechenden Befehl für Ihr Betriebssystem:

Für Ubuntu:

apt-get update && apt-get -y install linux-tools-generic

Für Debian:

apt-get update && apt-get -y install linux-perf

Für Fedora/RedHat-Derivate:

dnf install -y perf

Weitere Informationen zu bekannten Vorbehalten bei der Installation von PERF erhalten Sie vom Cisco TAC-Team.

Abfragen der Daten

Schritt 1: Identifizieren Sie den Hauptprozess des NSO.

Verwenden Sie den unten angegebenen Befehl, um den NSO-Prozess (ncs.smp) zu finden:

ps -ef | grep ncs\.smp

Beispiel:

root    120829       1  16 13:23 ? 00:11:08 /opt/ncs/current/lib/ncs/erts/bin/ncs.smp -K true -P 277140 -- -root /opt/ncs/current/lib/ncs -progname ncs -- -home / -- -cd /var/opt/ncs -pa /opt/ncs/current/lib/ncs/patches -boot ncs -ncs true -delayed-detach -noshell -noinput -yaws embedded true -kernel gethost_poolsize 16 -stacktrace_depth 24 -shutdown_time 30000 -ssl_dist_optfile /var/opt/ncs/state/ssl_dist_optfile -delayed-heart -conffile /etc/ncs/ncs.conf -max_fds 65535 -- -detached-fd 4

root    121424   120604  0 14:30 pts/0 00:00:00 grep --color=auto ncs.smp

Phase 2: Alternativ müssen Sie die PID des mit dem NSO verknüpften Java-Hauptprozesses verwenden, insbesondere wenn Sie sich auf Java-Operationen konzentrieren. Ausgeführt:

ps -ef | grep NcsJVMLauncher

Beispiel:

root    120903   120833  6 13:32 ? 00:03:40 java -classpath :/opt/ncs/current/java/jar/* -Dhost=127.0.0.1 -Dport=4569 -Djvm.restart.enabled=false -Djvm.restart.errCount=3 -Djvm.restart.duration=60 -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=OFF com.tailf.ncs.NcsJVMLauncher

root    121435   120604  0 14:33 pts/0 00:00:00 grep --color=auto NcsJVMLauncher

Schritt 3: Führen Sie den problematischen Test oder Anwendungsfall aus, um das Leistungsszenario zu validieren.

Schritt 4: Führen Sie in einem anderen Terminal-Fenster PERF für die entsprechenden Prozess-IDs (PIDs) aus. Verwenden Sie das unten angegebene Befehlsformat, und ersetzen Sie XX,YY,ZZ durch die oben erhaltenen PIDs:

perf record -F 100 -g -p XX,YY,ZZ

So erstellen Sie beispielsweise systemweite Profile und erfassen Anrufsdiagramme mit 99 Hz für bestimmte PIDs:

perf record -a -g -F 99 -p 120829,120903

Beispiel:

Warning:

PID/TID switch overriding SYSTEM

Optionsbeschreibungen:

- -a: Alle CPUs systemweite Erfassung aller CPUs (Standard, wenn kein Ziel angegeben ist).

- g: Aufrufdiagramme erfassen (Stack Traces). Gibt an, wo Funktionen aufgerufen werden.

- F: Abtastfrequenz in Hz. Höhere Frequenzen erhöhen die Präzision, führen jedoch zu mehr Overhead.

- S: Gibt die Prozess-ID(s) an.

Schritt 5: Wenn Sie alle Samples gesammelt haben, beenden Sie perf mit Strg+C:

^C

[ perf record: Woken up 1 times to write data ]

[ perf record: Captured and wrote 0.646 MB perf.data (4365 samples) ]

Im aktuellen Verzeichnis wird nun die Datei perf.data angezeigt.

Schritt 6: Generieren Sie mit dem folgenden Befehl einen zusammenfassenden Bericht:

perf report -n --stdio > perf_report.txt

Optionsbeschreibungen:

- n: Symbole ohne Gruppierung anzeigen (flache Ansicht).

- —stadio: Erzwingen Sie die Ausgabe auf die Standardausgabe (Terminal).

An dieser Stelle müssen Sie beide Dateien (perf.data und perf_report.txt) speichern und für Ihren Supportkontakt freigeben, bevor Sie mit der weiteren Analyse fortfahren können.

Wenn die Erfassung erfolgreich war, zeigt perf_report.txt eine baumartige Struktur an, die ein hierarchisches Aufrufdiagramm darstellt. Mithilfe von Prozentsätzen können Sie Hotspots identifizieren, in denen die meiste CPU-Zeit aufgewendet wird.

Beispielauszug:

# Children      Self       Samples  Command          Shared Object         Symbol

# ........  ........  ............  ...............  ....................  ...................................................................

#    30.61%     0.00%             0  C2 CompilerThre  libc.so.6             [.] start_thread

#            ---start_thread

#               thread_native_entry(Thread*)

#               Thread::call_run()

#               JavaThread::thread_main_inner()

#               CompileBroker::compiler_thread_loop()

#                          --30.58%--CompileBroker::invoke_compiler_on_method(CompileTask*)

#                                     --30.47%--C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)

#                                     Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)

#                                               |--17.57%--Compile::Code_Gen()

#                                               |          |--12.46%--PhaseChaitin::Register_Allocate()

#                                               |          |          |--2.79%--PhaseChaitin::build_ifg_physical(ResourceArea*)

#                                               |          |          |           --1.05%--PhaseChaitin::interfere_with_live(unsigned int, IndexSet*) [clone .part.0]

#                                               |          |--1.49%--PhaseChaitin::Split(unsigned int, ResourceArea*)

#                                               |          |--1.26%--PhaseChaitin::post_allocate_copy_removal()

Dolmetschen:

- Prozess/Thread: Der C2-CompilerThree-Thread wird analysiert.

- Gesamte CPU-Auslastung: Dieser Thread ist für 30,61% der CPU-Zeit verantwortlich.

- Funktionsablauf: Der Thread beginnt mit start_thread, und Delegaten arbeiten über mehrere Ebenen hinweg. Der Großteil der CPU-Zeit (30,47 %) wird in C2Compiler::compile_method verbracht, was auf einen potenziellen Hotspot hinweist.

Flammendiagramm erstellen

Schritt 1: Generieren Sie eine Leistungsabtastung aller CPUs und Prozesse über ein definiertes Intervall (z. B. 60 Sekunden):

perf record -a -g -F 99 sleep 60

Beispiel:

[ perf record: Woken up 32 times to write data ]

[ perf record: Captured and wrote 10.417 MB perf.data (67204 samples) ]

Phase 2: Kopieren oder übertragen Sie diese perf.data Datei auf einen Host, von dem Sie das flamegraph Template Repository herunterladen können.

Schritt 3: Konvertieren Sie die Datei perf.data in ein Textformat:

perf script > data.perf

Schritt 4: Klonen Sie das FlameGraph GitHub-Repository, und platzieren Sie data.perf in diesem Verzeichnis:

cp data.perf $PWD/FlameGraph/.

Schritt 5: Die Stapelspuren für die Flammengrafik-Verarbeitung reduzieren:

cat data.perf | ./stackcollapse-perf.pl > data.perf-folded

Schritt 6: Flammendiagramm SVG-Datei erzeugen:

./flamegraph.pl data.perf-folded > data.svg

Anmerkung: Wenn Sie den Fehler "can not locate open.pm in @INC" auf CentOS oder RHEL feststellen, installieren Sie das erforderliche Perl-Modul:

yum install perl-open.noarch

Schritt 7: Öffnen Sie die Datei data.svg in Ihrem bevorzugten Webbrowser, um das Flammendiagramm darzustellen.

Durchsuchen des Flammendiagramms

Sobald die Flammendiagrammdatei in Ihrem Browser geöffnet ist, können Sie mit ihr interagieren, indem Sie auf ein beliebiges Kästchen klicken, um die Funktion und die Aufrufliste zu vergrößern. Die Länge jedes Felds gibt die CPU-Zeit an, die in dieser Funktion und ihrem Aufrufstack verbracht wurde. Diese Visualisierung macht es einfach, Hotspots und Bereiche für eine Optimierung zu identifizieren.

Vergrößert ncs.smp:

Zugehörige Informationen

- Bekannte Vorbehalte zu Linux

- Technischer Support und Downloads von Cisco