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.
FlatPrinterune liste triée de méthodesGraphPrinterles relations entre appelants et appelésCallTreePrinterune 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,:wallou:objectout: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) }
endExaminer les résultats de stackprof
Utilisez l’outil en ligne de commande stackprof pour lire le fichier de vidage.
stackprof profile.dump --textpour obtenir un résumé--method Name#methexamine une seule méthode en détail--flamegraphproduit 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-profinstrumente chaque appel pour fournir des détails précisstackprofé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
- Mesurer les performances
- Outils de profilage
- Optimisation de la mémoire
- Goulots d’étranglement courants