Zum Inhalt springen
hanse-computing.de
  • Moin
  • Über uns
  • Leistungen
  • Projekte
  • Neuigkeiten
  • Wissen
    • Netzwerktechniken
    • Systemadministration
    • Hardware-Spezifikationen
    • KI & Automatisierung
    • Glossar
      • Fachbegriffe
      • Programmiersprachen-Befehle
    • Datenbanken
    • IT-Grundlagen
    • Python: Grundlagen
    • Python: Datenstrukturen
    • Python: Dateien & IO
    • Python: Web & Frameworks
    • Python: Fehler & Debugging
    • Webentwicklung
    • Linux & Betriebssysteme
    • IT-Sicherheit
    • Cloud & Container
    • Tools & Software
    • Netzwerk: TCP/IP
    • Netzwerk: DNS & Dienste
    • Netzwerk: Sicherheit
    • Netzwerk: Tools
    • KI: Grundlagen
    • KI: Praxis
    • KI: LLM & Agenten
    • Hardware: Server
    • Hardware: Netzwerkgeräte
    • Hardware: Peripherie
    • Wiki-Startseite
    • Letzte Änderungen
    • Kategorie-Browser
    • Zufallsartikel
  • Infrastruktur
  • AI Easy Start
  • Test-Drive
  • Kontakt
  • Impressum
  • Datenschutz

Sprache auswählen

  • Deutsch (Deutschland)
  • English (United Kingdom)
  1. Aktuelle Seite:  
  2. Startseite
  3. Wissen
  4. Glossar
  5. Programmiersprachen-Befehle

perf-Befehle: Performance-Analyse mit dem Linux-Profiler

perf (auch perf_events) ist das offizielle Performance-Analyse-Werkzeug des Linux-Kernels. Es nutzt die Hardware-Leistungszähler der CPU (PMU) und Kernel-Tracepoints, um zu messen, wo ein Programm Zeit verbringt — vom einfachen Event-Zählen bis zur detaillierten Aufruf-Analyse mit Call-Graphen.

Die wichtigsten Unterbefehle

perf list              # verfügbare Events auflisten
perf stat ./programm   # Events zählen (Zyklen, Instructions, Cache-Misses)
perf record ./programm # Sampling: Samples in perf.data schreiben
perf report            # gesammelte Daten analysieren
perf top               # Live-Ansicht wie top, nach CPU-Anteil sortiert

Praxis-Beispiele

  • perf stat zeigt standardmäßig Zyklen, Instructions, Cache-Misses und Branch-Misses; mit -e wählt man eigene Events: perf stat -e cycles,instructions,cache-misses ./programm
  • Sampling mit Call-Graph: perf record -g ./programm — perf report --tui öffnet danach die interaktive Hotspot-Ansicht
  • An einen laufenden Prozess anhängen: perf top -p <PID> oder perf record -p <PID>
  • Sampling-Frequenz setzen: perf record -F 99 ./programm (99 Hz, bewährt für Aufruf-Profile)
  • Mit perf record -g und perf script lassen sich Flamegraphs erzeugen (perf script | flamegraph.pl)
  • perf trace zeigt Systemaufrufe ähnlich wie strace, perf sched analysiert den Scheduler

Abgrenzung

Während strace-Befehle Systemaufrufe verfolgt und Valgrind-Befehle Speicherfehler finden, ist perf der Standard für CPU-Profile: Es misst die Hardware-Events direkt am Prozess und im Kernel, meist mit geringem Overhead.

Verwandte Grundlagen: ltrace-Befehle (Bibliotheksaufrufe), readelf-Befehle (ELF-Struktur).

ltrace-Befehle: Bibliotheksaufrufe verfolgen

ltrace ist ein Bibliotheksaufruf-Tracer für Linux: Es protokolliert, welche Funktionen aus dynamischen Bibliotheken (zum Beispiel libc) ein Programm aufruft — samt Argumenten und Rückgabewerten. Damit ergänzt es strace, das nur die Systemaufrufe des Kernels zeigt.

Grundlegende Aufrufe

ltrace ./programm        # alle Bibliotheksaufrufe anzeigen
ltrace -c ./programm     # Zusammenfassung: Aufruf-Zähler und Zeitanteile
ltrace -e malloc+free ./programm  # nur bestimmte Funktionen filtern
ltrace -p <PID>           # an laufenden Prozess anhängen
ltrace -S ./programm     # zusätzlich Systemaufrufe zeigen

Praxis-Tipps

  • Der Filter -e akzeptiert Ausdrücke wie -e malloc+free oder -e 'libc:*' (alle libc-Funktionen)
  • -f verfolgt Kindprozesse, -o datei schreibt die Ausgabe in eine Datei
  • -t bzw. -tt fügen Zeitstempel hinzu, -T misst die Dauer jedes Aufrufs
  • -a Spalte richtet die Rückgabewerte an einer Spalte aus (Standard 40)

Einordnung

ltrace nutzt wie strace-Befehle die ptrace-Schnittstelle, arbeitet aber eine Ebene höher: Es zeigt die Funktionen im Userland, nicht die Syscalls. Für die Frage „welche Bibliotheksfunktion wird wie oft aufgerufen?“ ist ltrace das passende Werkzeug, während perf-Befehle die CPU-Last messen.

Verwandte Grundlagen: perf-Befehle (Performance-Profile), readelf-Befehle (ELF-Struktur).

Valgrind-Befehle: Speicherfehler finden mit Memcheck und Co.

Valgrind ist eine Werkzeug-Suite, die Programme in einer eigenen Laufzeitumgebung instrumentiert und dadurch Speicherfehler, Daten-Races und Performance-Engpässe aufspürt. Das wichtigste Werkzeug ist Memcheck (Standard), das ungültige Zugriffe, Benutzung nicht initialisierten Speichers und Speicherlecks meldet.

Speicherfehler prüfen (Memcheck)

valgrind ./programm
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./programm
valgrind --error-exitcode=1 ./programm   # Exit-Code 1 bei Fehlern (CI)

Damit Valgrind Quellcode-Zeilen melden kann, muss das Programm mit Debug-Informationen übersetzt werden (gcc -g oder g++ -g). --leak-check=full zeigt jeden Speicherleck einzeln, --track-origins=yes hilft bei nicht initialisiertem Speicher, --error-exitcode=1 lässt Build-Pipelines bei gefundenen Fehlern scheitern.

Threads und Performance

valgrind --tool=helgrind ./thread-programm   # Daten-Races finden
valgrind --tool=drd ./thread-programm        # alternative Race-Erkennung
valgrind --tool=callgrind ./programm         # Call-Graph-Profil
valgrind --tool=massif ./programm            # Heap-Nutzung profilieren

Die Werkzeug-Suite umfasst Memcheck, Helgrind, DRD, Cachegrind, Callgrind und Massif. Helgrind und DRD erkennen Daten-Races in nebenläufigen Programmen, Callgrind erzeugt eine Datei callgrind.out.<pid>, die sich mit callgrind_annotate auswerten lässt; Massif schreibt massif.out.<pid> für ms_print. Cachegrind profiliert die Cache-Nutzung.

Praxis-Tipps

  • Valgrind verlangsamt Programme stark (Faktor 10–50) — nur für Tests, nicht für Produktivläufe.
  • Typische Meldungen: Invalid read of size 4, definitely lost: 40 bytes.
  • Wer Daten-Races nicht mit Helgrind klären kann, findet Konzepte unter Race Condition.

Verwandte Grundlagen: GDB-Befehle, GCC-Befehle, strace-Befehle, objdump-Befehle, Compiler.

strace-Befehle: Systemaufrufe verfolgen

strace ist ein Diagnose-Werkzeug für Linux, das die Systemaufrufe (Syscalls) eines Prozesses aufzeichnet — also die Schnittstelle zwischen Programm und Kernel. Damit lässt sich sichtbar machen, welche Dateien ein Programm öffnet, welche Netzwerkverbindungen es aufbaut und warum es beim Start scheitert.

Grundlagen

strace ./programm                  # Syscalls eines Programms verfolgen
strace -f ./programm               # auch Kindprozesse (fork) verfolgen
strace -p 1234                     # an laufenden Prozess anhängen
strace -o log.txt ./programm       # Ausgabe in Datei schreiben

Jede Zeile zeigt einen Systemaufruf mit Argumenten und Rückgabewert, zum Beispiel openat(AT_FDCWD, "/etc/passwd", O_RDONLY) = 3 — Datei geöffnet mit Deskriptor 3. Ein Rückgabewert von -1 ENOENT bedeutet: Die Datei existiert nicht, häufig die Ursache für Startfehler.

Gezielt filtern

strace -e trace=open,read,close ./programm   # nur bestimmte Syscalls
strace -e trace=network curl https://example.org   # nur Netzwerk-Syscalls
strace -c ./programm                   # Zusammenfassung als Statistik
strace -t -s 200 ./programm           # Zeitstempel + längere Strings

Mit -e trace= lassen sich Syscall-Klassen wie file, network, process, signal oder einzelne Namen auswählen. -c druckt eine Tabelle mit Anzahl, Fehlern und Zeit je Syscall, -t ergänzt Zeitstempel und -s begrenzt die angezeigte String-Länge.

Praxis-Tipps

  • Der Klassiker: strace -e trace=open,openat ./programm 2>&1 | grep -i config zeigt, welche Konfigurationsdatei ein Programm sucht.
  • Für laufende Dienste sudo strace -p <pid> verwenden — der Prozess läuft danach normal weiter (Strg-C löst ab).
  • strace nutzt ptrace und verlangsamt das Programm erheblich — gezielt einsetzen.

Verwandte Grundlagen: Prozess, Thread, GDB-Befehle, Valgrind-Befehle, objdump-Befehle.

objdump-Befehle: Binärdateien analysieren und disassemblieren

objdump aus den GNU Binutils zeigt Informationen über Objekt- und Binärdateien an und arbeitet als Disassembler: Es übersetzt Maschinencode zurück in Assembler. Damit lässt sich nachvollziehen, was der Compiler aus dem Quellcode erzeugt hat, oder eine fremde Binärdatei untersuchen.

Disassembly

objdump -d ./programm              # ausführbare Sektionen disassemblieren
objdump -D ./programm              # alle Sektionen disassemblieren
objdump -d -M intel ./programm     # Intel-Syntax (x86) statt AT&T
objdump -S ./programm              # Quellcode und Assembler gemischt (mit -g)

-d disassembliert nur Sektionen, die erwartbar Code enthalten; -D nimmt alle. Auf x86-Systemen zeigt objdump standardmäßig die AT&T-Syntax — mit -M intel wechselt man zur Intel-Syntax. -S mischt den Quellcode ein, wenn das Programm mit Debug-Informationen (-g) übersetzt wurde.

Datei-Inspektion

objdump -x ./programm              # alle Header und Sektionen
objdump -h ./programm              # Section-Tabelle (.text, .data, .rodata)
objdump -s -j .rodata ./programm   # Sektionsinhalt als Hexdump
objdump -t ./programm              # Symboltabelle

-x liefert den vollständigen Überblick über ELF-Header und Sektionen, -h die Sektionstabelle mit Größen, -s den Inhalt als Hexdump und -j wählt eine Sektion aus. Die Symboltabelle (-t) zeigt Funktions- und Variablennamen.

Praxis-Tipps

  • Verwandte Binutils-Werkzeuge: nm (Symbole auflisten), readelf (ELF-Struktur), addr2line (Adresse zur Quellzeile), objcopy, size, strings.
  • Ein Crash-Report mit Adresse 0x401234: addr2line -e ./programm 0x401234 liefert Datei und Zeile.
  • objdump ist der direkte Weg, die Maschinensprache hinter einem kompilierten Programm sichtbar zu machen.

Verwandte Grundlagen: Assembly-Befehle, GCC-Befehle, Linker, Valgrind-Befehle, strace-Befehle.

  1. GCC-Befehle: C/C++ kompilieren mit gcc und g++
  2. Clang-Befehle: Kompilieren mit dem LLVM-Compiler
  3. GDB-Befehle: Debuggen mit dem GNU Debugger
  4. Carbon-Befehle: Googles experimenteller C++-Nachfolger

Seite 5 von 46

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
hanse-computing.de

hanse-computing.de – KI-gestützte Dienstleistungen aus Lübeck.

hanse-computing.de
IT-Dienstleistungen aus der Hansestadt
Über uns · Projekte · Neuigkeiten · Affiliate
Impressum · Datenschutz
© 2026 hanse-computing.de
© 2026 hanse-computing Impressum Datenschutz