0Pricing
Ruby Academy · Lezione

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 metodi
  • GraphPrinter: le relazioni tra chiamanti e chiamati
  • CallTreePrinter: 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, :wall o :object
  • out: 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) }
end

Analisi dei risultati di stackprof

Utilizzi lo strumento da riga di comando stackprof per leggere il dump.

  • stackprof profile.dump --text per un riepilogo
  • --method Name#meth per analizzare in dettaglio un metodo
  • --flamegraph produce 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-prof strumenta ogni chiamata per fornire dettagli precisi
  • stackprof esegue 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

  1. Misurare le prestazioni
  2. Strumenti di profilazione
  3. Ottimizzazione della memoria
  4. Colli di bottiglia comuni
← Torna a Ruby Academy