Profilointityökalut
ruby-prof ja stackprof.
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.
FlatPrinterlajiteltu menetelmäluetteloGraphPrinterkutsujien ja kutsuttujen menetelmien suhteetCallTreePrinterKCachegrindille 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,:walltai:objectout:määrittää vedostiedoston polun
require 'stackprof'
StackProf.run(mode: :cpu, out: 'profile.dump') do
1_000_000.times { |i| Math.sqrt(i) }
endstackprof-tulosten tarkasteleminen
Lukekaa vedos komentorivityökalulla stackprof.
stackprof profile.dump --texttuottaa yhteenvedon--method Name#methtarkentaa yhteen menetelmään--flamegraphtuottaa 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-profinstrumentoi jokaisen kutsun yksityiskohtaisia tietoja vartenstackprofottaa 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.
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
- Suorituskyvyn mittaaminen
- Profilointityökalut
- Muistin optimointi
- Yleiset pullonkaulat