Ruby Academy · leksjon

Profileringsverktøy

ruby-prof og stackprof

Leksjon 2 av 413 trinn

Profileringsverktøy er en gratis leksjon i Ruby Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Ruby Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Ruby Academy inneholder totalt 4 leksjoner.

Benchmark kontra profiler

En benchmark forteller deg hvor lang tid noe tar. En profiler forteller deg hvor tiden brukes.

  • Profileringsverktøy fordeler tiden per metode eller linje
  • De avdekker flaskehalser du aldri ville ha gjettet deg frem til
  • Populære Ruby-profileringsverktøy: ruby-prof og stackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'

Oversikt over ruby-prof

ruby-prof er et detaljert profileringsverktøy som instrumenterer koden. Det kobler seg på hvert metodekall.

  • Svært nøyaktige kall- og tidsmålinger
  • Større overhead, så bruk det på representative utvalg
  • Installeres med gem install ruby-prof
# Gemfile
gem 'ruby-prof'

Profilere en blokk med ruby-prof

Pakk koden inn i RubyProf.profile for å hente et resultat som du kan skrive ut.

  • Returnerer et profilresultatobjekt
  • Send det til en skriver for å få utdata
require 'ruby-prof'

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

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

ruby-prof-skrivere

ruby-prof tilbyr flere skrivere for ulike visninger.

  • FlatPrinter, en sortert liste over metoder
  • GraphPrinter, relasjoner mellom kallere og kalte metoder
  • CallTreePrinter, utdata for KCachegrind
require 'ruby-prof'

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

Lese en flat profil

En flat profil viser metodene sortert etter medgått tid.

  • %self, tid brukt i selve metoden
  • total, total tid inkludert kalte metoder
  • calls, antall ganger metoden ble kalt

Fokuser først på oppføringene med høyest %self.

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

Oversikt over stackprof

stackprof er en profiler som bruker sampling. Den registrerer kallstakken med jevne mellomrom.

  • Svært lite overhead, og trygt å bruke i produksjon
  • Sampler etter CPU, veggtid eller objektallokering
  • Installeres med gem install stackprof
# Gemfile
gem 'stackprof'

Kjøre stackprof

StackProf.run profilerer en blokk og skriver resultatene til en fil.

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

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

Undersøke resultater fra stackprof

Bruk kommandolinjeverktøyet stackprof til å lese dumpen.

  • stackprof profile.dump --text gir et sammendrag
  • --method Name#meth går i dybden på én metode
  • --flamegraph produserer data for et flammegraf-diagram
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'

Sampling kontra instrumentering

De to profileringsverktøyene balanserer nøyaktighet mot overhead.

  • ruby-prof instrumenterer hvert kall: nøyaktig, men tregere
  • stackprof bruker sampling: omtrentlig, men lite ressurskrevende
  • Bruk stackprof i produksjon og ruby-prof for grundige undersøkelser
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }

Veggtid kontra CPU-tid

Velg profileringsmodus basert på flaskehalsen.

  • CPU-modus viser beregningstung kode
  • Veggtidsmodus fanger også opp venting på I/O, for eksempel nettverk eller disk
  • Langsomme endepunkter med databasekall trenger veggtidsmodus
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"

En arbeidsflyt for profilering

Effektiv profilering følger en bestemt løkke.

  • Gjenskap den langsomme situasjonen
  • Profiler for å finne flaskehalsen
  • Optimaliser bare den flaskehalsen
  • Profiler på nytt for å bekrefte forbedringen
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }

Hurtigsjekk

Test kunnskapen din om profilering.

Oppsummering

Du har lært om profileringsverktøy:

  • Profileringsverktøy viser hvor tiden brukes, ikke bare hvor lang tid noe tar
  • ruby-prof instrumenterer hvert kall for detaljerte og nøyaktige målinger
  • stackprof bruker sampling med liten kostnad og er trygt i produksjon
  • Velg CPU- eller veggtidsmodus basert på flaskehalsen
  • Følg løkken gjenskap, profiler, optimaliser og profiler på nytt

Deretter skal du redusere minneallokeringer.

Gratis å komme i gang

Lær deg Ruby med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
29
Leksjoner
109

Ofte stilte spørsmål

Er leksjonen «Profileringsverktøy» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Ruby Academy, inkludert «Profileringsverktøy», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Ruby Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Profileringsverktøy»?

ruby-prof og stackprof Du øver på Ruby Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Ruby Academy?

Ingen tidligere erfaring er nødvendig. Ruby Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Profileringsverktøy»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Ruby Academy-leksjonen?

Ja. Alle Ruby Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Måle ytelse
  2. Profileringsverktøy
  3. Minn оптимisering
  4. Vanlige flaskehalser
← Tilbake til Ruby Academy