0Pricing
Ruby Academy · Lektion

Profiling-Tools

ruby-prof und stackprof

Profiling-Tools ist eine kostenlose Ruby Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Ruby Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Benchmark und Profiler

Ein Benchmark zeigt Ihnen, wie lange etwas dauert. Ein Profiler zeigt Ihnen, wo die Zeit innerhalb dieses Vorgangs anfällt.

  • Profiler schlüsseln die Zeit nach Methode oder Zeile auf
  • Sie machen Hotspots sichtbar, die Sie sonst niemals erraten würden
  • Beliebte Ruby-Profiler sind ruby-prof und stackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'

Überblick über ruby-prof

ruby-prof ist ein detaillierter instrumentierender Profiler. Er erfasst jeden Methodenaufruf.

  • Sehr genaue Aufrufzahlen und Zeitmessungen
  • Höherer Overhead, daher sollten Sie repräsentative Stichproben verwenden
  • Installation mit gem install ruby-prof
# Gemfile
gem 'ruby-prof'

Einen Block mit ruby-prof profilieren

Schließen Sie Code in RubyProf.profile ein, um ein Ergebnis zu erfassen, das Sie ausgeben können.

  • Gibt ein Profil-Ergebnisobjekt zurück
  • Übergeben Sie es für die Ausgabe an einen Printer
require 'ruby-prof'

result = RubyProf.profile do
  1000.times { |i| (1..i).reduce(:+) }
end

RubyProf::FlatPrinter.new(result).print(STDOUT)

ruby-prof-Printer

ruby-prof bietet mehrere Printer für unterschiedliche Ansichten.

  • FlatPrinter, eine nach Methoden sortierte Liste
  • GraphPrinter, Beziehungen zwischen Aufrufer und Aufgerufenem
  • CallTreePrinter, Ausgabe für KCachegrind
require 'ruby-prof'

result = RubyProf.profile { 100.times { 'x' * 1000 } }
RubyProf::GraphPrinter.new(result).print(STDOUT, min_percent: 1)

Ein Flat-Profil lesen

Ein Flat-Profil listet Methoden nach der von ihnen verbrauchten Zeit auf.

  • %self, die in der Methode selbst verbrachte Zeit
  • total, die Zeit einschließlich aufgerufener Methoden
  • calls, die Anzahl der Aufrufe

Konzentrieren Sie sich zuerst auf die Einträge mit den höchsten %self-Werten.

# Example flat output columns:
# %self  total  self  wait  child  calls  name
puts 'Optimize the top %self method first'

Überblick über stackprof

stackprof ist ein Sampling-Profiler. Er zeichnet regelmäßig den Call-Stack auf.

  • Sehr geringer Overhead, daher für die Produktion geeignet
  • Erfasst Samples nach CPU, Wandzeit oder Objektallokation
  • Installation mit gem install stackprof
# Gemfile
gem 'stackprof'

stackprof ausführen

StackProf.run profiliert einen Block und schreibt die Ergebnisse in eine Datei.

  • mode: kann :cpu, :wall oder :object sein
  • out: legt den Pfad der Dump-Datei fest
require 'stackprof'

StackProf.run(mode: :cpu, out: 'profile.dump') do
  1_000_000.times { |i| Math.sqrt(i) }
end

stackprof-Ergebnisse untersuchen

Verwenden Sie das Kommandozeilen-Tool stackprof, um den Dump zu lesen.

  • stackprof profile.dump --text für eine Zusammenfassung
  • --method Name#meth, um eine einzelne Methode genauer zu untersuchen
  • --flamegraph erzeugt Daten für ein Flamegraph
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'

Sampling und Instrumentierung

Die beiden Profiler tauschen Genauigkeit gegen Overhead.

  • ruby-prof instrumentiert jeden Aufruf: exakt, aber langsamer
  • stackprof verwendet Sampling: näherungsweise, aber ressourcenschonend
  • Verwenden Sie stackprof in der Produktion und ruby-prof für detaillierte Analysen
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }

Wandzeit und CPU-Zeit

Wählen Sie den Profiling-Modus passend zum Engpass.

  • CPU-Modus zeigt rechenintensiven Code
  • Wall-Modus erfasst auch I/O-Wartezeiten, etwa bei Netzwerk oder Festplatte
  • Langsame Endpunkte mit Datenbankaufrufen benötigen den Wall-Modus
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"

Ein Profiling-Ablauf

Effektives Profiling folgt einem Kreislauf.

  • Reproduzieren Sie das langsame Szenario
  • Profilieren Sie es, um den Hotspot zu finden
  • Optimieren Sie nur diesen Hotspot
  • Profilieren Sie erneut, um die Verbesserung zu bestätigen
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }

Schnelltest

Testen Sie Ihr Wissen über Profiling.

Zusammenfassung

Sie haben Profiling-Tools kennengelernt:

  • Profiler zeigen, wo Zeit verbraucht wird, nicht nur wie lange etwas dauert
  • ruby-prof instrumentiert jeden Aufruf für detaillierte, präzise Messungen
  • stackprof arbeitet ressourcenschonend mit Sampling und ist für die Produktion geeignet
  • Wählen Sie den CPU- oder Wall-Modus passend zum Engpass
  • Folgen Sie dem Kreislauf aus Reproduzieren, Profilieren, Optimieren und erneutem Profilieren

Als Nächstes reduzieren Sie Speicherallokationen.

Häufig gestellte Fragen

Ist die Lektion „Profiling-Tools“ kostenlos?

Ja — der vollständige Text von „Profiling-Tools“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Ruby Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Ruby Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Profiling-Tools“?

ruby-prof und stackprof Du übst Ruby Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Ruby Academy zu starten?

Keine Vorkenntnisse erforderlich. Ruby Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Profiling-Tools“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Ruby Academy-Lektion Code schreiben und ausführen?

Ja. Jede Ruby Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Performance messen
  2. Profiling-Tools
  3. Speicheroptimierung
  4. Häufige Bottlenecks
← Zurück zu Ruby Academy