Ruby Academy · Lektion

Profileringsværktøjer

ruby-prof og stackprof

Lektion 2 af 413 trin

Profileringsværktøjer er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.

Benchmark kontra profiler

Et benchmark fortæller dig, hvor lang tid noget tager. En profiler fortæller dig, hvor tiden bruges inde i det.

  • Profilere opdeler tiden pr. metode eller linje
  • De afslører flaskehalse, som du aldrig ville have gættet
  • Populære Ruby-profiler: ruby-prof og stackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'

Oversigt over ruby-prof

ruby-prof er et detaljeret profileringsværktøj, der instrumenterer kode. Det kobler sig på hvert metodekald.

  • Meget præcise optællinger af kald og tidsmålinger
  • Større ekstraomkostning, så brug det på repræsentative datasæt
  • Installeres med gem install ruby-prof
# Gemfile
gem 'ruby-prof'

Profilering af en blok med ruby-prof

Ombryd kode i RubyProf.profile for at opsamle et resultat, du kan udskrive.

  • Returnerer et profilresultatobjekt
  • Send det til en udskriver for at få uddata
require 'ruby-prof'

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

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

ruby-prof-udskrivere

ruby-prof tilbyder flere udskrivere til forskellige visninger.

  • FlatPrinter en sorteret liste over metoder
  • GraphPrinter forhold mellem kaldere og kaldte metoder
  • CallTreePrinter uddata til KCachegrind
require 'ruby-prof'

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

Læsning af en flad profil

En flad profil viser metoder sorteret efter den tid, de bruger.

  • %self tid brugt i selve metoden
  • total tid inklusive kaldte metoder
  • calls antal gange metoden blev kaldt

Fokusér først på posterne med den højeste %self-værdi.

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

Oversigt over stackprof

stackprof er en stikprøvebaseret profiler. Den registrerer med jævne mellemrum kaldestakken.

  • Meget lav ekstraomkostning og sikker i produktion
  • Udtager stikprøver efter CPU, vægur eller objektallokering
  • Installeres med gem install stackprof
# Gemfile
gem 'stackprof'

Kørsel af stackprof

StackProf.run profilerer en blok og skriver resultaterne til en fil.

  • mode: kan være :cpu, :wall eller :object
  • out: angiver stien til dumpfilen
require 'stackprof'

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

Undersøgelse af resultater fra stackprof

Brug kommandolinjeværktøjet stackprof til at læse dumpet.

  • stackprof profile.dump --text til en oversigt
  • --method Name#meth går i dybden med én metode
  • --flamegraph genererer flammegrafdata
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'

Stikprøveudtagning kontra instrumentering

De to profilere afvejer nøjagtighed mod ekstraomkostning.

  • ruby-prof instrumenterer hvert kald: præcist, men langsommere
  • stackprof udtager stikprøver: tilnærmet, men billigt
  • Brug stackprof i produktion og ruby-prof til dybdegående analyser
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }

Vægur-tid kontra CPU-tid

Vælg profileringsindstilling ud fra flaskehalsen.

  • CPU-indstilling viser beregningstung kode
  • Vægur-indstilling medtager også I/O-ventetid som netværk eller disk
  • Langsomme slutpunkter med databasekald har brug for vægur-indstilling
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"

En arbejdsgang til profilering

Effektiv profilering følger en løkke.

  • Genskab den langsomme situation
  • Profilér for at finde flaskehalsen
  • Optimér kun den flaskehals
  • Profilér igen for at bekræfte forbedringen
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }

Hurtigt tjek

Afprøv din viden om profilering.

Opsummering

Du har lært om profileringsværktøjer:

  • Profilere viser, hvor tiden bruges, ikke kun hvor lang tid noget tager
  • ruby-prof instrumenterer hvert kald for at give præcise detaljer
  • stackprof udtager stikprøver med lave omkostninger og er sikkert i produktion
  • Vælg CPU- eller vægur-indstilling ud fra flaskehalsen
  • Følg løkken: genskab, profilér, optimér, og profilér igen

Derefter skal du reducere hukommelsesallokeringer.

Gratis at komme i gang

Lær Ruby med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
29
Lektioner
109

Ofte stillede spørgsmål

Er lektionen “Profileringsværktøjer” gratis?

Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “Profileringsværktøjer”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Profileringsværktøjer”?

ruby-prof og stackprof Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Ruby Academy?

Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Profileringsværktøjer”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Ruby Academy-lektion?

Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Måling af ydeevne
  2. Profileringsværktøjer
  3. Hukommelsesoptimering
  4. Almindelige flaskehalse
← Tilbage til Ruby Academy