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 metodGraphPrinter— relacje wywołujący/wywoływanyCallTreePrinter— 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,:walllub:objectout: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) }
endAnalizowanie wyników stackprof
Użyj narzędzia wiersza poleceń stackprof, aby odczytać plik z danymi.
stackprof profile.dump --textwyświetla podsumowanie--method Name#methpozwala przejść do szczegółów jednej metody--flamegraphgeneruje 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-profinstrumentuje każde wywołanie, zapewniając szczegółowe danestackprofwykonuje 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
- Pomiar wydajności
- Narzędzia do profilowania
- Optymalizacja pamięci
- Typowe wąskie gardła