Case StudiesBlogO nas
Porozmawiajmy

Jak monitorować zużycie i wycieki pamięci w Node.js

Startup House

10 gru 20215 min czytania

Node.jsBack-end development

Spis treści

  • Czym jest „wyciek pamięci” w Node.js?

  • Na czym polega Garbage Collection w Node.js?

    • Przykład aplikacji z wyciekiem pamięci

  • Wykrywanie wycieków pamięci z Node Inspector i Chrome DevTools

    • 3 snapshoty sterty w Node.js

  • Wnioski — poznaj swoje narzędzia

Dla inżyniera Node.js wycieki pamięci w aplikacji potrafią być koszmarem, z którego nie tak łatwo się przebudzić. Co więcej, im dłużej pozostają niewykryte, tym dłużej ten zły sen się ciągnie.

Oznacza to, że zużycie CPU, pamięci, load average i czas odpowiedzi w aplikacji z błędami wycieku pamięci będą stopniowo rosły, aż CPU dojdzie do 100% wykorzystania, po czym usługa przestanie odpowiadać. To objawy, z jakimi może mierzyć się developer, gdy aplikacja cierpi na wyciek pamięci.

Jeśli brzmi to znajomo, czytaj dalej i sprawdź, jak poradzić sobie z tymi symptomami oraz jak monitorować zużycie pamięci i wycieki pamięci w aplikacjach Node.js.

 Arrow11.png

Czym jest „wyciek pamięci” w Node.js?

W prostych słowach: wyciek pamięci to sytuacja, w której aplikacja alokuje blok pamięci i go nie zwalnia lub gdy mechanizm Garbage Collector w Node.js nie zdołał go uprzątnąć.

Cóż, mniej więcej…

Na czym polega Garbage Collection w Node.js?

Rozmawiając o wyciekach pamięci, trzeba wspomnieć o Garbage Collectorze. Mówiąc najprościej, Garbage Collector to automatyczny mechanizm odpowiedzialny za odzyskiwanie pamięci zajętej przez nieużywane obiekty.

W pierwszej fazie („mark”) Garbage Collector zaznacza nieużywane obiekty do usunięcia. W drugiej, „sweep”, odzyskuje pamięć.

 Unicorn2.png

Przykład aplikacji z wyciekiem pamięci

Na potrzeby tutorialu przygotowałem prostą aplikację Express.js, w której każde żądanie powoduje, że tablica leak rośnie w trakcie działania, co spowalnia serwis. Tablica ta nigdzie nie jest ręcznie czyszczona, a garbage collection nie obejmuje zmiennych zadeklarowanych globalnie. 

Wykrywanie wycieków pamięci z Node Inspector i Chrome DevTools

Aby użyć Node Inspector, uruchom aplikację w trybie inspect, a w CLI TypeScript:

node --inspect index.js

Następnie skrypt z opcją inspect pojawi się na liście w zakładce DevTools/Devices. Kliknij Inspect, aby podpiąć Chrome DevTools do procesu Node. W naszym przypadku interesuje nas zakładka Memory i opcja heap snapshot.

Swirl3.png

3 snapshoty sterty w Node.js

Aby sprawdzić, czy nasza aplikacja ma wyciek pamięci, wykonamy 3 heap snapshots. Pierwszy — zaraz po uruchomieniu serwera; drugi — po benchmarku 1000 żądań do serwera; trzeci — po kolejnym benchmarku 1000 żądań.

Drugi snapshot, po pierwszym benchmarku 1000 żądań, może być sygnałem ostrzegawczym, jeśli sterta urosła. Zróbmy więc ostatni snapshot po drugim benchmarku — to pomoże potwierdzić, czy aplikacja ma wyciek pamięci.

Aby znaleźć przyczynę, wybierz trzeci snapshot, kliknij opcję porównania i zestaw go z pierwszym. To pozwoli zidentyfikować nowo utworzone obiekty od startu serwera.

Na końcu przyjrzyj się tym obiektom dokładniej i wyszukaj takie o tym samym rozmiarze alokacji. Dzięki temu można namierzyć i naprawić wycieki pamięci w aplikacji.

Wnioski — poznaj swoje narzędzia

Jeśli będziesz trzymać się znanych i sprawdzonych bibliotek, naprawa wycieku pamięci w Node.js zwykle okaże się łatwiejsza niż jego wykrycie. Kluczowe jest pełne zrozumienie garbage collection w DevTools oraz innych narzędzi, z których korzystasz podczas budowy aplikacji. Mając do dyspozycji różne debugery, narzędzia do wyłapywania wycieków i generatory wykresów użycia, umiejętność izolowania wycieków tam, gdzie je znajdziesz, sprawi, że Twoje oprogramowanie będzie działało szybciej i wydajniej.

W Startup Development House nie ukrywamy, że świetnie znamy się na Node.js i skutecznie rozwiązujemy problemy, które przy tym napotykamy. Jeśli jesteś aspirującym developerem i przydałoby Ci się trochę tego know-how, śmiało odezwij się na

 

Opublikowany 10 grudnia 2021

Udostępnij


Startup House

Digital Transformation Strategy for Siemens Finance

Cloud-based platform for Siemens Financial Services in Poland

See full Case Study
Ad image
Jak monitorować zużycie i wycieki pamięci w Node.js
Nie przegap żadnego artykułu - zapisz się do naszego newslettera
Zgadzam się na otrzymywanie komunikacji marketingowej od Startup House. Kliknij, aby zobaczyć szczegóły

Może Ci się również spodobać...

Jak wybrać najlepszą agencję Node.js w 2023 roku: kompleksowy przewodnik
Node.jsDigital products

Jak wybrać najlepszą agencję Node.js w 2023 roku: kompleksowy przewodnik

Node.js stał się kluczową technologią do tworzenia niezawodnych, skalowalnych aplikacji webowych. W tym kontekście rola firm programistycznych specjalizujących się w Node.js jest ważniejsza niż kiedykolwiek. Ten artykuł pomoże Ci wybrać najlepsze firmy specjalizujące się w Node.js, dopasowane do Twoich potrzeb.

Marek Pałys

02 lut 20236 min czytania

Ruby on Rails - guide
Ruby on RailsBack-end developmentComputer programming

Jak zainstalować Ruby i Ruby on Rails oraz używać RubyGems

Poznaj przewodnik krok po kroku, który pokaże, jak zainstalować i wykorzystać Ruby on Rails do efektywnego tworzenia aplikacji internetowych. Dowiesz się, jak zainstalować i skonfigurować Ruby, zarządzać różnymi wersjami, korzystać z RubyGems i Bundlera oraz stworzyć nowy projekt w Ruby on Rails. Rozpocznij swoją przygodę z tworzeniem aplikacji w Ruby on Rails dzięki temu kompleksowemu przewodnikowi.

Jan Grela

20 mar 20206 min czytania

Stack technologiczny 2020: GraphQL, Apollo Server i React.js
Back-end developmentProduct developmentGraphQL

Stack technologiczny 2020: GraphQL, Apollo Server i React.js

Od 2000 roku zasady RESTful są branżowym standardem w tworzeniu web API, jednak GraphQL oferuje bardziej efektywne rozwiązanie. W tym artykule omawiamy zalety GraphQL w porównaniu z REST, jego popularność oraz to, jak za pomocą Apollo GraphQL zbudować serwer i aplikację kliencką.

Wojciech Cichoradzki

12 maj 20207 min czytania

Gotowy, aby scentralizować swoje know-how z pomocą AI?

Rozpocznij nowy rozdział w zarządzaniu wiedzą — gdzie Asystent AI staje się centralnym filarem Twojego cyfrowego wsparcia.

Umów bezpłatną konsultację

Pracuj z zespołem, któremu ufają firmy z czołówki rynku.

Rainbow logo
Siemens logo
Toyota logo

Budujemy to, co będzie dalej.

Firma

Startup Development House sp. z o.o.

Aleje Jerozolimskie 81

Warszawa, 02-001

VAT-ID: PL5213739631

KRS: 0000624654

REGON: 364787848

Kontakt

hello@startup-house.com

Nasze biuro: +48 789 011 336

Nowy biznes: +48 798 874 852

Obserwuj nas

Award
logologologologo

Copyright © 2026 Startup Development House sp. z o.o.

UE ProjektyPolityka prywatności