Profilointi ja muistivuotojen havaitseminen
Opitte mittaamaan suorittimen ja muistin käyttöä Node.js:ssä, keräämään profiileja ja etsimään muistivuotoja ennen kuin ne kaatavat tuotantojärjestelmän.
Profilointi ja muistivuotojen havaitseminen on ilmainen Node.js-taustakehityksen bootcamp-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Node.js-taustakehityksen bootcamp-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 4 oppituntia.
Miksi profiloida?
Ette voi optimoida sellaista, mitä ette voi mitata. Profilointi paljastaa, mihin sovelluksen aika kuluu (suorittimeen) ja kuinka paljon muistia käytetään, joten voitte korjata todellisen pullonkaulan arvailun sijaan.
Yleinen sääntö on: mitatkaa, muuttakaa yhtä asiaa ja mitatkaa uudelleen.
Muistinkäytön mittaaminen
Node tarjoaa reaaliaikaiset muistitilastot komennolla process.memoryUsage(). Keskeinen kenttä on heapUsed — JavaScript-keon varaama muisti.
const m = process.memoryUsage();
console.log('Heap used MB:', (m.heapUsed / 1048576).toFixed(1));Mikä on muistivuoto?
Muistivuoto syntyy, kun tarpeettomiin olioihin viitataan edelleen, jolloin roskienkerääjä ei voi vapauttaa niitä. Ajan myötä heapUsed kasvaa ja prosessi kaatuu lopulta.
Yleiset vuotojen lähteet
Useimmat Node.js:n muistivuodot johtuvat muutamista yleisistä malleista:
- Kasvavat globaalit taulukot tai välimuistit, joista ei koskaan poisteta sisältöä
- Unohtuneet tapahtumankuuntelijat
- Sulkeumat, jotka säilyttävät suuria olioita
- Ajastimet, joita ei koskaan pysäytetä
const cache = [];
app.get('/x', (req, res) => {
cache.push(req.body); // never cleared = leak
res.end();
});Koodiosuuksien ajoituksen mittaaminen
Nopeaan suorituskyvyn mittaamiseen console.time ja console.timeEnd mittaavat, kuinka kauan koodilohkon suorittaminen kestää.
console.time('work');
for (let i = 0; i < 1e6; i++) {}
console.timeEnd('work');Tarkan resoluution ajoitus
Tarkkoja vertailumittauksia varten käyttäkää Performance API:a, joka tarjoaa alle millisekunnin tarkkuuden ilman kellonajan muutosten vaikutusta.
const { performance } = require('perf_hooks');
const start = performance.now();
doWork();
console.log('Took', performance.now() - start, 'ms');Suorittimen profilointi komennolla --prof
Suorittakaa Node --prof-lipulla tallentaaksenne V8:n suoritusprofiilin. Se kirjoittaa lokitiedoston, jonka voitte käsitellä luettavaksi raportiksi.
// node --prof app.js
// node --prof-process isolate-*.log > report.txtKekikuvakaappaukset
Kekikuvakaappaus tallentaa jokaisen muistissa olevan olion tietyllä hetkellä. Ottakaa kaksi kuvakaappausta eri ajankohtina ja verratkaa niitä löytääksenne jatkuvasti kasvavat kohteet.
Voitte ottaa kuvakaappaukset Chrome DevToolsilla (muodostamalla yhteyden komennolla --inspect) tai ohjelmallisesti.
// node --inspect app.js
// then open chrome://inspect and take heap snapshotsClinic.js-työkalupaketti
clinic-työkalusarja havainnollistaa suorituskykyongelmia. Clinic Doctor diagnosoi ongelmia, kun taas Clinic Heap Profiler seuraa muistivarauksia.
// npm install -g clinic
// clinic doctor -- node app.jsVuodon havaitseminen käytännössä
Kirjatkaa heapUsed-arvo säännöllisesti tasaisen kuormituksen aikana. Jos arvo kasvaa eikä palaudu roskienkeräyksen jälkeen, sovelluksessa on todennäköisesti vuoto — ottakaa sitten kuvakaappaus syyllisen löytämiseksi.
setInterval(() => {
const mb = process.memoryUsage().heapUsed / 1048576;
console.log('Heap MB:', mb.toFixed(1));
}, 5000);Vuotojen korjaaminen
Kun vuoto on löytynyt, yleisiä korjauksia ovat:
- Rajoittakaa välimuistien kokoa LRU-strategialla
- Poistakaa kuuntelijat komennoilla
removeListener/off - Pysäyttäkää ajastimet komennolla
clearInterval - Välttäkää suurten olioiden säilyttämistä pitkäikäisissä sulkeumissa
Pikatarkistus
Testatkaa profilointia koskevat tietonne.
Kertaus
Opitte profiloimaan sovellusta ja löytämään muistivuotoja:
- Mitattakaa muistia komennolla
process.memoryUsage() - Mitatkaa koodin suoritusaikaa komennoilla
console.timeja Performance API:lla - Ottakaa suoritusprofiileja komennolla
--profja kekikuvakaappauksia komennolla--inspect - Havaitkaa vuodot kasvavasta
heapUsed-arvosta ja korjatkaa ne rajatuilla välimuisteilla sekä siivotuilla kuuntelijoilla ja ajastimilla
Ensin tehtävä mittaus muuttaa optimoinnin arvailusta järjestelmälliseksi suunnitteluksi.
Opi JavaScript 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
- 22
- Oppitunnit
- 92
Usein kysytyt kysymykset
Onko oppitunti ”Profilointi ja muistivuotojen havaitseminen” ilmainen?
Kyllä – oppitunnin ”Profilointi ja muistivuotojen havaitseminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Node.js-taustakehityksen bootcamp-kurssin, päivitä CoddyKit PROhon. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Profilointi ja muistivuotojen havaitseminen”?
Opitte mittaamaan suorittimen ja muistin käyttöä Node.js:ssä, keräämään profiileja ja etsimään muistivuotoja ennen kuin ne kaatavat tuotantojärjestelmän. Harjoittelet Node.js-taustakehityksen bootcamp-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Node.js-taustakehityksen bootcamp-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Node.js-taustakehityksen bootcamp-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Profilointi ja muistivuotojen havaitseminen”-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ä Node.js-taustakehityksen bootcamp-oppitunnilla?
Kyllä. Jokainen Node.js-taustakehityksen bootcamp-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
- Node.js:n välimuististrategiat
- Node.js-sovellusten kuormantasaus
- Node.js:n tapahtumasilmukan optimointi
- Profilointi ja muistivuotojen havaitseminen