0Pricing
Ruby Academy · Leçon

Outils de profilage

ruby-prof et stackprof

Outils de profilage est une leçon Ruby Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Ruby Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Ruby Academy comprend 4 leçons au total.

Évaluation de performance ou profilage

Une évaluation de performance indique combien de temps prend une opération. Un profileur indique où ce temps est consacré.

  • Les profileurs répartissent le temps par méthode ou par ligne
  • Ils révèlent des points chauds que vous n’auriez jamais devinés
  • Profileurs Ruby populaires : ruby-prof et stackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'

Présentation de ruby-prof

ruby-prof est un profileur détaillé par instrumentation. Il s’intègre à chaque appel de méthode.

  • Comptage des appels et mesures de durée très précis
  • Surcharge plus élevée : utilisez-le sur des échantillons représentatifs
  • Installé avec gem install ruby-prof
# Gemfile
gem 'ruby-prof'

Analyser un bloc avec ruby-prof

Entourez le code de RubyProf.profile pour obtenir un résultat que vous pouvez afficher.

  • Renvoie un objet contenant le résultat du profilage
  • Transmettez-le à un générateur de sortie
require 'ruby-prof'

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

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

Générateurs de sortie de ruby-prof

ruby-prof propose plusieurs générateurs de sortie pour obtenir différentes vues.

  • FlatPrinter une liste triée de méthodes
  • GraphPrinter les relations entre appelants et appelés
  • CallTreePrinter une sortie pour KCachegrind
require 'ruby-prof'

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

Lire un profil à plat

Un profil à plat répertorie les méthodes selon le temps consommé.

  • %self temps passé dans la méthode elle-même
  • total temps incluant les méthodes appelées
  • calls nombre d’appels

Commencez par examiner les entrées dont la valeur %self est la plus élevée.

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

Présentation de stackprof

stackprof est un profileur par échantillonnage. Il enregistre périodiquement la pile d’appels.

  • Surcharge très faible, sans danger en production
  • Échantillonne le CPU, le temps réel ou les allocations d’objets
  • Installé avec gem install stackprof
# Gemfile
gem 'stackprof'

Exécuter stackprof

StackProf.run analyse un bloc et écrit les résultats dans un fichier.

  • mode: peut être :cpu, :wall ou :object
  • out: définit le chemin du fichier de vidage
require 'stackprof'

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

Examiner les résultats de stackprof

Utilisez l’outil en ligne de commande stackprof pour lire le fichier de vidage.

  • stackprof profile.dump --text pour obtenir un résumé
  • --method Name#meth examine une seule méthode en détail
  • --flamegraph produit des données pour un graphique en flammes
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'

Échantillonnage ou instrumentation

Les deux profileurs font un compromis entre précision et surcharge.

  • ruby-prof instrumente chaque appel : précis, mais plus lent
  • stackprof échantillonne : approximatif, mais peu coûteux
  • Utilisez stackprof en production et ruby-prof pour les analyses approfondies
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }

Temps réel ou temps CPU

Choisissez le mode de profilage en fonction du goulot d’étranglement.

  • Le mode CPU révèle le code exigeant en calcul
  • Le mode temps réel capture également les attentes d’E/S, comme celles du réseau ou du disque
  • Les points d’accès lents qui effectuent des appels à la base de données nécessitent le mode temps réel
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"

Un processus de profilage

Un profilage efficace suit une boucle.

  • Reproduisez le scénario lent
  • Effectuez le profilage pour trouver le point chaud
  • Optimisez uniquement ce point chaud
  • Répétez le profilage pour confirmer l’amélioration
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }

Vérification rapide

Vérifiez vos connaissances en matière de profilage.

Récapitulatif

Vous avez découvert les outils de profilage :

  • Les profileurs indiquent où le temps est passé, pas seulement combien de temps s’est écoulé
  • ruby-prof instrumente chaque appel pour fournir des détails précis
  • stackprof échantillonne à faible coût et peut être utilisé en production
  • Choisissez le mode CPU ou temps réel selon le goulot d’étranglement
  • Suivez la boucle reproduire, profiler, optimiser, puis profiler à nouveau

Ensuite, vous réduirez les allocations de mémoire.

Questions Fréquemment Posées

La leçon « Outils de profilage » est-elle gratuite ?

Oui — le texte complet de « Outils de profilage » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Ruby Academy, passe à CoddyKit PRO. Le cours Ruby Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Outils de profilage » ?

ruby-prof et stackprof Tu pratiques Ruby Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Ruby Academy ?

Aucune expérience préalable n'est requise. Ruby Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Outils de profilage » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Ruby Academy ?

Oui. Chaque leçon Ruby Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Mesurer les performances
  2. Outils de profilage
  3. Optimisation de la mémoire
  4. Goulots d’étranglement courants
← Retour à Ruby Academy