Ruby Academy · Lección

Herramientas de perfilado

ruby-prof y stackprof

Lección 2 de 413 pasos

Herramientas de perfilado es una lección gratuita de Ruby Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Ruby Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Ruby Academy incluye 4 lecciones en total.

Benchmark frente a perfilador

Un benchmark indica cuánto tarda algo. Un perfilador indica dónde se emplea el tiempo dentro de ello.

  • Los perfiladores desglosan el tiempo por método o línea
  • Revelan puntos críticos que nunca habría imaginado
  • Perfiladores populares de Ruby: ruby-prof y stackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'

Descripción general de ruby-prof

ruby-prof es un perfilador detallado basado en instrumentación. Se conecta a cada llamada de método.

  • Proporciona recuentos de llamadas y mediciones de tiempo muy precisos
  • Tiene una sobrecarga mayor, así que úselo con muestras representativas
  • Se instala con gem install ruby-prof
# Gemfile
gem 'ruby-prof'

Perfilar un bloque con ruby-prof

Envuelva el código en RubyProf.profile para capturar un resultado que pueda imprimir.

  • Devuelve un objeto con el resultado del perfilado
  • Páselo a un formateador para obtener la salida
require 'ruby-prof'

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

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

Formateadores de ruby-prof

ruby-prof ofrece varios formateadores para obtener distintas vistas.

  • FlatPrinter, un listado ordenado de métodos
  • GraphPrinter, las relaciones entre llamadores y llamados
  • CallTreePrinter, salida para KCachegrind
require 'ruby-prof'

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

Leer un perfil plano

Un perfil plano enumera los métodos según el tiempo consumido.

  • %self, tiempo empleado en el propio método
  • total, tiempo total incluidos los métodos llamados
  • calls, número de veces que se invocó

Concéntrese primero en las entradas con el valor %self más alto.

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

Descripción general de stackprof

stackprof es un perfilador de muestreo. Registra periódicamente la pila de llamadas.

  • Tiene una sobrecarga muy baja, por lo que es seguro en producción
  • Toma muestras por CPU, tiempo de reloj o asignación de objetos
  • Se instala con gem install stackprof
# Gemfile
gem 'stackprof'

Ejecutar stackprof

StackProf.run perfila un bloque y escribe los resultados en un archivo.

  • mode: puede ser :cpu, :wall o :object
  • out: establece la ruta del archivo de volcado
require 'stackprof'

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

Inspeccionar los resultados de stackprof

Use la herramienta de línea de comandos stackprof para leer el volcado.

  • stackprof profile.dump --text muestra un resumen
  • --method Name#meth permite examinar un método concreto
  • --flamegraph genera datos para un flamegraph
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'

Muestreo frente a instrumentación

Los dos perfiladores intercambian precisión por sobrecarga.

  • ruby-prof instrumenta cada llamada: es exacto, pero más lento
  • stackprof toma muestras: es aproximado, pero ligero
  • Use stackprof en producción y ruby-prof para análisis detallados
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }

Tiempo de reloj frente a tiempo de CPU

Elija el modo de perfilado según el cuello de botella.

  • El modo CPU muestra el código con mucho procesamiento
  • El modo de reloj también captura esperas de E/S, como las de red o disco
  • Los endpoints lentos con llamadas a la base de datos necesitan el modo de reloj
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"

Un flujo de trabajo de perfilado

El perfilado eficaz sigue un ciclo.

  • Reproduzca el escenario lento
  • Perfile para encontrar el punto crítico
  • Optimice únicamente ese punto crítico
  • Vuelva a perfilar para confirmar la mejora
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }

Comprobación rápida

Compruebe sus conocimientos sobre el perfilado.

Resumen

Ha aprendido sobre las herramientas de perfilado:

  • Los perfiladores muestran dónde se emplea el tiempo, no solo cuánto tarda algo
  • ruby-prof instrumenta cada llamada para ofrecer detalles precisos
  • stackprof toma muestras con poco coste y es seguro en producción
  • Elija el modo CPU o de reloj según el cuello de botella
  • Siga el ciclo de reproducir, perfilar, optimizar y volver a perfilar

A continuación reducirá las asignaciones de memoria.

Gratis para empezar

Aprende Ruby con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
29
Lecciones
109

Preguntas frecuentes

¿La lección «Herramientas de perfilado» es gratis?

Sí — el texto completo de «Herramientas de perfilado» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Ruby Academy, actualiza a CoddyKit PRO. El curso de Ruby Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Herramientas de perfilado»?

ruby-prof y stackprof Practicas Ruby Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Ruby Academy?

No se requiere experiencia previa. Ruby Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Herramientas de perfilado»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Ruby Academy?

Sí. Cada lección de Ruby Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Medición del rendimiento
  2. Herramientas de perfilado
  3. Optimización de memoria
  4. Cuellos de botella comunes
← Volver a Ruby Academy