Herramientas de perfilado
ruby-prof y stackprof
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étodosGraphPrinter, las relaciones entre llamadores y llamadosCallTreePrinter, 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,:wallo:objectout: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) }
endInspeccionar los resultados de stackprof
Use la herramienta de línea de comandos stackprof para leer el volcado.
stackprof profile.dump --textmuestra un resumen--method Name#methpermite examinar un método concreto--flamegraphgenera 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-profinstrumenta cada llamada para ofrecer detalles precisosstackproftoma 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.
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
- Medición del rendimiento
- Herramientas de perfilado
- Optimización de memoria
- Cuellos de botella comunes