0Pricing
Ruby Academy · Lekcja

Narzędzia do profilowania

ruby-prof i stackprof

Narzędzia do profilowania to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Benchmark a profiler

Benchmark informuje, ile czasu coś zajmuje. Profiler pokazuje, gdzie ten czas jest zużywany.

  • Profilery rozkładają czas na poszczególne metody lub wiersze
  • Ujawniają wąskie gardła, których nie dałoby się odgadnąć
  • Popularne profilery Ruby: ruby-prof i stackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'

Omówienie ruby-prof

ruby-prof to szczegółowy profiler oparty na instrumentacji. Podłącza się do każdego wywołania metody.

  • Bardzo dokładne liczby wywołań i czasy
  • Większy narzut, dlatego należy używać go na reprezentatywnych próbkach
  • Instalacja za pomocą gem install ruby-prof
# Gemfile
gem 'ruby-prof'

Profilowanie bloku za pomocą ruby-prof

Umieść kod w RubyProf.profile, aby przechwycić wynik, który można wyświetlić.

  • Zwraca obiekt wyniku profilowania
  • Przekaż go do printera, aby uzyskać dane wyjściowe
require 'ruby-prof'

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

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

Printery ruby-prof

ruby-prof oferuje kilka printerów zapewniających różne widoki danych.

  • FlatPrinter — posortowana lista metod
  • GraphPrinter — relacje wywołujący/wywoływany
  • CallTreePrinter — dane wyjściowe dla KCachegrind
require 'ruby-prof'

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

Odczytywanie profilu płaskiego

Profil płaski wyświetla metody według zużytego czasu.

  • %self — czas spędzony w samej metodzie
  • total — czas obejmujący również wywoływane metody
  • calls — liczba wywołań

Najpierw skup się na wpisach z najwyższą wartością %self.

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

Omówienie stackprof

stackprof to profiler próbkowy. Okresowo rejestruje stos wywołań.

  • Bardzo mały narzut, dzięki czemu można go bezpiecznie używać na produkcji
  • Próbkuje według czasu procesora, czasu rzeczywistego lub alokacji obiektów
  • Instalacja za pomocą gem install stackprof
# Gemfile
gem 'stackprof'

Uruchamianie stackprof

StackProf.run profiluje blok i zapisuje wyniki do pliku.

  • mode: może przyjąć wartość :cpu, :wall lub :object
  • out: ustawia ścieżkę do pliku z danymi
require 'stackprof'

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

Analizowanie wyników stackprof

Użyj narzędzia wiersza poleceń stackprof, aby odczytać plik z danymi.

  • stackprof profile.dump --text wyświetla podsumowanie
  • --method Name#meth pozwala przejść do szczegółów jednej metody
  • --flamegraph generuje dane do flamegraphu
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'

Próbkowanie a instrumentacja

Oba profilery stanowią kompromis między dokładnością a narzutem.

  • ruby-prof instrumentuje każde wywołanie: jest dokładny, ale wolniejszy
  • stackprof próbkuje: jest przybliżony, ale mały
  • Używaj stackprof na produkcji, a ruby-prof do szczegółowych analiz
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }

Czas rzeczywisty a czas procesora

Wybierz tryb profilowania na podstawie wąskiego gardła.

  • Tryb CPU pokazuje kod intensywnie wykorzystujący procesor
  • Tryb wall uwzględnia również oczekiwanie na operacje wejścia-wyjścia, takie jak sieć lub dysk
  • Wolne endpointy wykonujące zapytania do bazy danych wymagają trybu wall
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"

Proces profilowania

Skuteczne profilowanie przebiega w pętli.

  • Odtwórz powolny scenariusz
  • Wykonaj profilowanie, aby znaleźć wąskie gardło
  • Optymalizuj tylko to wąskie gardło
  • Wykonaj profilowanie ponownie, aby potwierdzić poprawę
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }

Szybkie sprawdzenie

Proszę sprawdzić znajomość profilowania.

Podsumowanie

Nauczyli się Państwo korzystać z narzędzi do profilowania:

  • Profilery pokazują, gdzie zużywany jest czas, a nie tylko ile go upływa
  • ruby-prof instrumentuje każde wywołanie, zapewniając szczegółowe dane
  • stackprof wykonuje niedrogie próbkowanie i można go bezpiecznie używać na produkcji
  • Wybieraj tryb CPU lub wall na podstawie wąskiego gardła
  • Stosuj pętlę: odtworzenie problemu, profilowanie, optymalizacja i ponowne profilowanie

W następnej części ograniczą Państwo liczbę alokacji pamięci.

Często zadawane pytania

Czy lekcja „Narzędzia do profilowania” jest bezpłatna?

Tak — pełny tekst „Narzędzia do profilowania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Narzędzia do profilowania”?

ruby-prof i stackprof Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?

Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Narzędzia do profilowania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?

Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pomiar wydajności
  2. Narzędzia do profilowania
  3. Optymalizacja pamięci
  4. Typowe wąskie gardła
← Powrót do Ruby Academy