Ruby Academy · Oppitunti

Profilointityökalut

ruby-prof ja stackprof.

Oppitunti 2/413 vaihetta

Profilointityökalut on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Vertailutesti ja profileri

Vertailutesti kertoo, kuinka kauan jokin kestää. Profileri kertoo, mihin aika sen sisällä kuluu.

  • Profilerit jakavat ajan menetelmien tai rivien mukaan
  • Ne paljastavat kuormituskohdat, joita ette muuten osaisi arvata
  • Suosittuja Ruby-profilereita ovat ruby-prof ja stackprof
# Profilers answer: which method consumed the most time?
puts 'Benchmark = how long, Profiler = where'

ruby-prof-esittely

ruby-prof on yksityiskohtainen instrumentointiprofileri. Se kytkeytyy jokaiseen menetelmäkutsuun.

  • Erittäin tarkat kutsumäärät ja ajoitukset
  • Suurempi kuormitus, joten käyttäkää sitä edustavilla näytteillä
  • Asentakaa komennolla gem install ruby-prof
# Gemfile
gem 'ruby-prof'

Lohkon profilointi ruby-profilla

Ympäröikää koodi komennolla RubyProf.profile, jotta voitte kerätä tulostettavan tuloksen.

  • Palauttaa profilointituloksen sisältävän olion
  • Välittäkää se tulostimelle tulostamista varten
require 'ruby-prof'

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

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

ruby-profin tulostimet

ruby-prof tarjoaa useita tulostimia erilaisia näkymiä varten.

  • FlatPrinter lajiteltu menetelmäluettelo
  • GraphPrinter kutsujien ja kutsuttujen menetelmien suhteet
  • CallTreePrinter KCachegrindille tarkoitettu tuloste
require 'ruby-prof'

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

Litteän profilointituloksen lukeminen

Litteä profilointitulos luettelee menetelmät niiden kuluttaman ajan mukaan.

  • %self menetelmään itseensä käytetty aika
  • total kokonaisaika, mukaan lukien kutsutut menetelmät
  • calls kutsujen määrä

Keskittykää ensin suurimpiin %self-arvoihin.

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

stackprof-esittely

stackprof on näytteenottoon perustuva profileri. Se tallentaa kutsupinon säännöllisin väliajoin.

  • Erittäin pieni kuormitus, joten sitä voi käyttää turvallisesti tuotannossa
  • Ottaa näytteitä suorittimen käytön, kuluneen ajan tai olioiden varauksen perusteella
  • Asentakaa komennolla gem install stackprof
# Gemfile
gem 'stackprof'

stackprofin suorittaminen

StackProf.run profiloi lohkon ja kirjoittaa tulokset tiedostoon.

  • mode: voi olla :cpu, :wall tai :object
  • out: määrittää vedostiedoston polun
require 'stackprof'

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

stackprof-tulosten tarkasteleminen

Lukekaa vedos komentorivityökalulla stackprof.

  • stackprof profile.dump --text tuottaa yhteenvedon
  • --method Name#meth tarkentaa yhteen menetelmään
  • --flamegraph tuottaa liekkikaavion tiedot
# Shell
# stackprof profile.dump --text
# stackprof profile.dump --method 'Array#sort'
puts 'Analyze the dump with the stackprof CLI'

Näytteenotto ja instrumentointi

Nämä kaksi profileria vaihtavat tarkkuutta suorituskuormaan.

  • ruby-prof instrumentoi jokaisen kutsun: tarkka mutta hitaampi
  • stackprof ottaa näytteitä: suuntaa antava mutta kevyt
  • Käyttäkää stackprofia tuotannossa ja ruby-profia yksityiskohtaiseen analyysiin
modes = { 'ruby-prof' => 'instrumenting', 'stackprof' => 'sampling' }
modes.each { |tool, kind| puts "#{tool}: #{kind}" }

Kulunut aika ja suoritinaika

Valitkaa profilointitila pullonkaulan perusteella.

  • CPU-tila näyttää laskentaa painottavan koodin
  • Wall-tila huomioi myös I/O-odotukset, kuten verkon tai levyn
  • Tietokantakutsuja sisältävät hitaat päätepisteet tarvitsevat wall-tilaa
# I/O bound? use wall. CPU bound? use cpu.
bottleneck = 'database query'
mode = bottleneck.include?('query') ? :wall : :cpu
puts "Use mode: #{mode}"

Profilointityönkulku

Tehokas profilointi etenee toistuvana silmukkana.

  • Toistakaa hidas tilanne
  • Profiloikaa kuormituskohta löytääksenne
  • Optimoikaa vain kyseinen kuormituskohta
  • Profiloikaa uudelleen parannuksen varmistamiseksi
steps = ['reproduce', 'profile', 'optimize hotspot', 're-profile']
steps.each_with_index { |s, i| puts "#{i + 1}. #{s}" }

Pikatarkistus

Testatkaa profilointia koskeva osaamisenne.

Kertaus

Opitte käyttämään profilointityökaluja:

  • Profilerit näyttävät, mihin aika kuluu, eivät vain sitä, kuinka kauan suoritus kestää
  • ruby-prof instrumentoi jokaisen kutsun yksityiskohtaisia tietoja varten
  • stackprof ottaa näytteitä kevyesti, joten sitä voi käyttää turvallisesti tuotannossa
  • Valitkaa CPU- tai wall-tila pullonkaulan perusteella
  • Noudattakaa työnkulkua: toistakaa, profiloikaa, optimoikaa ja profiloikaa uudelleen

Seuraavaksi vähennätte muistin varauksia.

Aloita maksutta

Opi Ruby tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
29
Oppitunnit
109

Usein kysytyt kysymykset

Onko oppitunti ”Profilointityökalut” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Profilointityökalut”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Profilointityökalut”?

ruby-prof ja stackprof. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Profilointityökalut”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?

Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Suorituskyvyn mittaaminen
  2. Profilointityökalut
  3. Muistin optimointi
  4. Yleiset pullonkaulat
← Takaisin: Ruby Academy