Stop worrying about the potholes in the road and enjoy the journey

Як відстежувати використання пам’яті у вашому Node.js додатку

Розуміння того, скільки пам’яті споживає ваш додаток Node.js, є важливим для оптимізації продуктивності та запобігання витокам пам’яті. Node.js надає вбудовані інструменти для програмного перевірки використання пам’яті, а також існують зовнішні інструменти для моніторингу в реальному часі.

1. Використання process.memoryUsage()

Метод process.memoryUsage() у Node.js надає детальну інформацію про споживання пам’яті поточним процесом. Ось базовий приклад:

console.log('Використання пам'яті:', process.memoryUsage());

Це виведе об’єкт з наступними полями:

  • rss: Resident Set Size – загальна пам’ять, використана процесом, включаючи код, дані та виділену пам’ять.
  • heapTotal: Загальна пам’ять, виділена для купи JavaScript.
  • heapUsed: Пам’ять, яка наразі використовується об’єктами JavaScript.
  • external: Пам’ять, використана об’єктами C++, пов’язаними з Node.js.

Приклад виводу:

{
  "rss": 33157120,
  "heapTotal": 7385088,
  "heapUsed": 4812560,
  "external": 8272
}

2. Форматування використання пам’яті для зручності читання

Щоб зробити вивід більш зручним для користувача, ви можете форматувати значення в мегабайтах:

function formatMemoryUsage(memory) {
    return {
        rss: `${(memory.rss / 1024 / 1024).toFixed(2)} MB`,
        heapTotal: `${(memory.heapTotal / 1024 / 1024).toFixed(2)} MB`,
        heapUsed: `${(memory.heapUsed / 1024 / 1024).toFixed(2)} MB`,
        external: `${(memory.external / 1024 / 1024).toFixed(2)} MB`
    };
}

console.log('Використання пам'яті:', formatMemoryUsage(process.memoryUsage()));

3. Моніторинг пам’яті в реальному часі

Якщо ви хочете моніторити використання пам’яті в реальному часі, ви можете налаштувати періодичний лог за допомогою setInterval:

setInterval(() => {
    console.log('Використання пам'яті:', formatMemoryUsage(process.memoryUsage()));
}, 5000); // Кожні 5 секунд

4. Зовнішній моніторинг використання пам’яті

У випадках, коли ви хочете перевірити використання пам’яті з іншого терміналу або без зміни вашого коду, ось кілька варіантів:

4.1. Використання системних команд

На Linux/Unix:

ps aux | grep node
top -p <PID>

На Windows:

tasklist | findstr node

Потім ви можете моніторити використання пам’яті за допомогою інструментів, таких як top, htop або Диспетчер завдань на Windows.

4.2. Використання бібліотеки pidusage

Пакет pidusage є зручним інструментом для відстеження використання пам’яті та процесора для будь-якого процесу Node.js. Встановіть його за допомогою:

npm install pidusage

Ось приклад використання:

import pidusage from 'pidusage';

setInterval(async () => {
    const stats = await pidusage(process.pid);
    console.log(`Пам'ять: ${(stats.memory / 1024 / 1024).toFixed(2)} MB`);
}, 5000);

Висновок

Щоб ефективно моніторити використання пам’яті:

  • Використовуйте process.memoryUsage() для вбудованих інсайтів у споживання пам’яті вашим додатком.
  • Форматуйте вивід для кращої читабельності, якщо це необхідно.
  • Для моніторингу в реальному часі використовуйте періодичне логування або зовнішні інструменти, такі як pidusage, top або htop.

Ці техніки можуть допомогти вам підтримувати ваші додатки Node.js оптимізованими та запобігати проблемам з пам’яттю, які можуть вплинути на продуктивність.

1