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