Profileringsværktøjer
ruby-prof og stackprof
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.
FlatPrinteren sorteret liste over metoderGraphPrinterforhold mellem kaldere og kaldte metoderCallTreePrinteruddata 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,:walleller:objectout:angiver stien til dumpfilen
require 'stackprof'
StackProf.run(mode: :cpu, out: 'profile.dump') do
1_000_000.times { |i| Math.sqrt(i) }
endUndersøgelse af resultater fra stackprof
Brug kommandolinjeværktøjet stackprof til at læse dumpet.
stackprof profile.dump --texttil en oversigt--method Name#methgår i dybden med én metode--flamegraphgenererer 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-profinstrumenterer hvert kald for at give præcise detaljerstackprofudtager 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.
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
- Måling af ydeevne
- Profileringsværktøjer
- Hukommelsesoptimering
- Almindelige flaskehalse