Profileringsverktøy
ruby-prof og stackprof
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 metoderGraphPrinter, relasjoner mellom kallere og kalte metoderCallTreePrinter, 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,:walleller:objectout:angir banen til dumpfilen
require 'stackprof'
StackProf.run(mode: :cpu, out: 'profile.dump') do
1_000_000.times { |i| Math.sqrt(i) }
endUndersøke resultater fra stackprof
Bruk kommandolinjeverktøyet stackprof til å lese dumpen.
stackprof profile.dump --textgir et sammendrag--method Name#methgår i dybden på én metode--flamegraphproduserer 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-profinstrumenterer hvert kall for detaljerte og nøyaktige målingerstackprofbruker 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.
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
- Måle ytelse
- Profileringsverktøy
- Minn оптимisering
- Vanlige flaskehalser