Strumenti di profilazione
ruby-prof e stackprof
Strumenti di profilazione è una lezione Ruby Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Ruby Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ruby Academy include 4 lezioni in totale.
Benchmark e profiler
Un benchmark indica quanto tempo richiede un'operazione. Un profiler indica dove viene impiegato quel tempo.
- I profiler suddividono il tempo per metodo o per riga
- Rivelano i punti critici che non potrebbe mai individuare a intuito
- Profiler Ruby diffusi: ruby-prof e stackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'Panoramica di ruby-prof
ruby-prof è un profiler dettagliato basato sulla strumentazione. Si aggancia a ogni chiamata di metodo.
- Conteggi delle chiamate e misurazioni molto precisi
- Overhead maggiore, quindi lo utilizzi su campioni rappresentativi
- Si installa con
gem install ruby-prof
# Gemfile
gem 'ruby-prof'Profilazione di un blocco con ruby-prof
Avvolga il codice in RubyProf.profile per acquisire un risultato che può stampare.
- Restituisce un oggetto risultato della profilazione
- Lo passi a un printer per ottenere l'output
require 'ruby-prof'
result = RubyProf.profile do
1000.times { |i| (1..i).reduce(:+) }
end
RubyProf::FlatPrinter.new(result).print(STDOUT)Printer di ruby-prof
ruby-prof offre diversi printer per visualizzazioni differenti.
FlatPrinter: un elenco ordinato di metodiGraphPrinter: le relazioni tra chiamanti e chiamatiCallTreePrinter: output per KCachegrind
require 'ruby-prof'
result = RubyProf.profile { 100.times { 'x' * 1000 } }
RubyProf::GraphPrinter.new(result).print(STDOUT, min_percent: 1)Lettura di un profilo flat
Un profilo flat elenca i metodi in base al tempo consumato.
- Tempo %self trascorso nel metodo stesso
- Tempo total, inclusi i metodi chiamati
- Numero di calls, cioè quante volte è stato invocato
Si concentri prima sulle voci con il valore %self più alto.
# Example flat output columns:
# %self total self wait child calls name
puts 'Optimize the top %self method first'Panoramica di stackprof
stackprof è un profiler a campionamento. Registra periodicamente lo stack delle chiamate.
- Overhead molto ridotto, quindi è sicuro in produzione
- Esegue campionamenti per CPU, tempo reale o allocazione di oggetti
- Si installa con
gem install stackprof
# Gemfile
gem 'stackprof'Esecuzione di stackprof
StackProf.run profila un blocco e scrive i risultati in un file.
mode:può essere:cpu,:wallo:objectout:imposta il percorso del file di dump
require 'stackprof'
StackProf.run(mode: :cpu, out: 'profile.dump') do
1_000_000.times { |i| Math.sqrt(i) }
endAnalisi dei risultati di stackprof
Utilizzi lo strumento da riga di comando stackprof per leggere il dump.
stackprof profile.dump --textper un riepilogo--method Name#methper analizzare in dettaglio un metodo--flamegraphproduce dati per un flamegraph
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'Campionamento e strumentazione
I due profiler rappresentano un compromesso tra accuratezza e overhead.
- ruby-prof strumenta ogni chiamata: è preciso, ma più lento
- stackprof esegue campionamenti: è approssimato, ma leggero
- Utilizzi stackprof in produzione e ruby-prof per analisi approfondite
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }Tempo reale e tempo CPU
Scelga la modalità di profilazione in base al collo di bottiglia.
- La modalità CPU mostra il codice a forte intensità di calcolo
- La modalità wall include anche le attese I/O, ad esempio di rete o disco
- Per gli endpoint lenti con chiamate al DB serve la modalità wall
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"Un flusso di lavoro per la profilazione
Una profilazione efficace segue un ciclo.
- Riproduca lo scenario lento
- Esegua la profilazione per trovare il punto critico
- Ottimizzi solo quel punto critico
- Esegua nuovamente la profilazione per confermare il miglioramento
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }Controllo rapido
Verifichi le sue conoscenze sulla profilazione.
Riepilogo
Ha imparato a conoscere gli strumenti di profilazione:
- I profiler mostrano dove viene impiegato il tempo, non solo quanto ne occorre
ruby-profstrumenta ogni chiamata per fornire dettagli precisistackprofesegue campionamenti con costi ridotti ed è sicuro in produzione- Scelga la modalità CPU o wall in base al collo di bottiglia
- Segua il ciclo riprodurre, profilare, ottimizzare e profilare di nuovo
Ora ridurrà le allocazioni di memoria.
Domande Frequenti
La lezione «Strumenti di profilazione» è gratuita?
Sì — il testo completo di «Strumenti di profilazione» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Ruby Academy, passa a CoddyKit PRO. Il corso Ruby Academy include 4 lezioni in totale.
Cosa imparerò in «Strumenti di profilazione»?
ruby-prof e stackprof Eserciti Ruby Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Ruby Academy?
Non è richiesta alcuna esperienza precedente. Ruby Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Strumenti di profilazione»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Ruby Academy?
Sì. Ogni lezione Ruby Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Misurare le prestazioni
- Strumenti di profilazione
- Ottimizzazione della memoria
- Colli di bottiglia comuni