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 ListeGraphPrinter, Beziehungen zwischen Aufrufer und AufgerufenemCallTreePrinter, 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,:walloder:objectseinout: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) }
endstackprof-Ergebnisse untersuchen
Verwenden Sie das Kommandozeilen-Tool stackprof, um den Dump zu lesen.
stackprof profile.dump --textfür eine Zusammenfassung--method Name#meth, um eine einzelne Methode genauer zu untersuchen--flamegrapherzeugt 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-profinstrumentiert jeden Aufruf für detaillierte, präzise Messungenstackprofarbeitet 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
- Performance messen
- Profiling-Tools
- Speicheroptimierung
- Häufige Bottlenecks