Делать Node.js Приложения быстро и крепкие — это сложная задача, чтобы получить право. Прибивает производительность прямо с V8 двигатель Node.js построен на не так просто, как можно подумать. JavaScript — это динамически напечатанный язык , где вы позволяете переводчику назначить типы для переменных. Если вы не осторожны, это может привести к утечкам памяти. Node.js — это сущность выполнения JavaScript с ограничениями относительно использования памяти и использования потоков CPU. У него есть сборщик мусора, которая плотно связана с использованием памяти процесса, так и использованием CPU.
Есть различные метрики для изучения и отслеживания, но которые важны? Эта статья обсудит ключевые показатели, которые имеют жизненно важное значение при анализе эффективности вашего Node.js.
Metrics Usage CPU для Node.js
Я упомянул выше, что Runtime unode.js имеет ограничения относительно использования потока CPU. Причина этого — это время выполнения Одиночная нить выполнения , означает, что это связано с одним ядром процессора. Один экземпляр приложения Node.js может использовать только один CPU CORE.
Тем не менее, имея это в виду, Node.js приложения редко потребляют большое количество процессорного времени. Вместо этого они полагаются на не блокировка ввода/вывода Отказ ЦП не нужно ждать запросов ввода/вывода, вместо этого обращаться с ними асинхронно. Если вы сталкиваетесь с высоким использованием процессоров, это может означать, что многие синхронные работы используют процессор и блокируют нить. Это плохо! Блокируя нить, он также блокирует асинхронные процессы.
Большую часть времени вам не нужно беспокоиться о нагрузках CPU. Они редко бывают сделки. То, что вы можете сделать, чтобы снизить использование ЦП — это создавать дочерние процессы или вилки для обработки интенсивных задач CPU. Примером будет то, что у вас есть веб-сервер, который обрабатывает входящие запросы. Чтобы избежать блокировки этой темы, вы можете создавать Детский процесс справиться с интенсивной задачей CPU. Довольно круто.
Фиксация CPU Интенсивный код — это первый шаг для повышения производительности и устойчивости вашего Node.js Server. Метрики, чтобы осмотреть:
- Использование процессора
- ЦП нагрузка
Использование памяти и метрики утечек для Node.js
Чтобы понять использование памяти и потенциальные утечки, вам сначала нужно понять, что Куча и стек находятся. Значения могут быть сохранены в стеке или куче. Стек может быть визуально представлен как стоп книги, где книги на самом деле функционируют и их контекст хранятся в памяти. Куча — это большая область, которая хранит все, что выделяется динамически.
С этим с пути есть одна ключевая вещь о Node.js Process Memory, которую вы должны знать. Один процесс может иметь максимальную кучу 1,5 ГБ. Ты угадал! Утечки памяти являются распространенной проблемой в Node.js. Они происходят, когда объекты ссылаются слишком длинные, значения значений хранятся, даже если они не нужны. Поскольку Node.js основан на двигателе V8, он использует сборку мусора для восстановления памяти, используемой переменными, которые больше не нужны. Этот процесс восстановления памяти останавливает выполнение программы. Мы упомянем сбор мусора более подробно немного вниз в следующем разделе.
Вычислить утечки памяти проще, чем вы можете подумать. Если ваша память процессов постоянно растет, пока не будет периодически уменьшена сборка мусора, у вас, скорее всего, утечка памяти. В идеале, вы бы хотели сосредоточиться на предотвращении утечек памяти, а не устранения неисправностей и отладки их. Если вы столкнулись с утечкой памяти в вашем приложении, это ужасно трудно отслеживать корневую причину. Метрики, которые вам нужно смотреть на себя:
- Выпущенная память между циклами сбора мусора
- Процесс кучи Размер
- Использование процессов кучи
Метрики для сбора мусора для Node.js
Во время выполнения V8 мусорная коллекция останавливает выполнение программы. Есть два типа Коллекция мусора Отказ Один называется потрясением и использует Инкрементные циклы сбора мусора обрабатывать только часть кучи за раз. Это очень быстро по сравнению с Полный сборщик мусора циклов , который возвращает память от объектов и переменных, которые пережили несколько инкрементных циклов сбора мусора. Поскольку полные циклы сбора мусора приостанавливают выполнение программы, они выполняются реже.
Измеряя, как часто выполняется полный или инкрементный цикл сборки Сравнивая выпущенную память с размером кучи, может показать вам, если существует растущая тенденция, ведущая вам, чтобы выяснить, если у вас есть утечка памяти.
Из-за всего, что упомянуто выше, вы должны отслеживать следующие метрики сборки мусора Node.js:
- Время, потребляемое для сборки мусора
- Счетчики для полных циклов сбора мусора
- Счетчики для инкрементных циклов сбора мусора
- Выпущенная память после сборки мусора
Node.js метрики событий
Node.js по своей природе быстры, потому что он может обрабатывать события асинхронно. Что позволяет это возможным, это контур событий . Это особое место Зарезервировано для обработки асинхронных функций, которые называются ответами к определенным событиям и выполнены за пределами основного потока. Такие функции также называются Функции обратного вызова Отказ
Node.js имеет возможность быть границей CPU и использовать асинхронные операции, чтобы не тратить циклы CPU при ожидании операций ввода-вывода. Сервер может обрабатывать огромное количество соединений и не быть заблокированным для операций ввода/вывода. Это называется не блокировка ввода/вывода , а Знаменитый срок. Однако цикл события может замедляться и в конечном итоге приведет к каждому последующему событию, чтобы занять больше времени для обработки, вызывая что-то называемое Задержка петли событий Отказ
Общие причины отставания контура события — Длительные синхронные процессы и Инкрементное увеличение задач на петлю .
Длительные синхронные процессы
Будьте внимательны о том, как вы обрабатываете синхронное исполнение в вашем приложении. Все остальные операции должны ждать, чтобы быть выполненным. Отсюда известное правило для выступления Node.js. Не заблокируйте петлю событий! Вы не можете избежать связи CPU, ваш сервер делает, но вы можете быть умными о том, как выполнить асинхронные по сравнению с синхронными задачами. Как упоминалось выше, используйте вилки или дочерние процессы для синхронных задач.
Инкрементное увеличение задач на петлю
В качестве масштабов ваших приложений вы увидите увеличение нагрузки и количества задач на петлю. Node.js отслеживает все асинхронные функции, которые необходимо обрабатывать петлей события. Задержка, которое происходит с увеличением задач, приведет к увеличению времени отклика, когда подсчет становится слишком высоким.
Хорошая новость заключается в том, что вы можете облегчить это, увеличивая количество процессов, выполняющих приложение. Используя модуль кластера, вы можете использовать все серверы CPU вашего сервера. Конечно, вы также можете использовать PM2 для создания рабочих процессов. Подробнее об этом в следующем разделе.
Если вы хотите более подробное объяснение петли события, проверьте Этот разговор Филипп Робертс из Jsconf ЕС.
Вот почему вам нужно следить за этими метриками:
- Медленная обработка событий (максимальная задержка)
- Самое быстрое обслуживание событий (минимальная задержка)
- Среднее задержка контура событий
Node.js Кластерно-режим и рабочие процессы Forking
До сих пор я упомянул однопоточную природу Node.js несколько раз, а также капюшон памяти одного процесса и как блокируя нить — что-то, чтобы избежать всех мер. Масштабирование Node.js за пределы этого делается с модуль кластера Отказ
Используя модуль кластера, вы можете создать основной процесс, который разделяет сокеты с процессами разработчиков. Эти процессы могут обмениваться сообщениями. Вот кикер. Все раздробленные рабочие процессы имеют свой собственный идентификатор процесса и могут работать на выделенном центре CPU. Типичное использование для веб-серверов является рабочие процессы для подделки, которые работают на сокетке для общего сервера и обрабатывают запросы в Round-Robin Fashion.
Проверка количества рабочих процессов, которые оба включают в себя процессы, порожденные модулем кластера и дочерних процессов, порожденные, выполняющие синхронные задачи, от основной нити, могут быть важными метриками. Если они будут прекращены по какой-то причине, вам важно, чтобы вы не могли заставить их снова работать. Наличие этой функции в инструменте мониторинга может быть большим преимуществом!
Метрики, чтобы посмотреть здесь:
- График работника
- Задержка контура событий на одного работника
Node.js HTTP-запрос/Задержка ответа
Хранение озадачивающихся пользователем задержек, является наиболее важным шагом в мониторинге любого API. HTTP-запросы, ударяя свой сервер, и ответы возвращаются к своим пользователям своевременно, это то, что ваши клиенты будут возвращаться. Мониторинг API маршруты популярных рамх, таких как Экспресс С Коа и Хапи , является обязательным.
При мониторинге HTTP-запроса и метрики ответа необходимо учитывать 4 ключевых значения:
- Время отклика
- Скорость запроса
- Скорость ошибок
- Размер контента запроса/ответа
Node.js Мониторинг приборной панели и интеграции
Ваше приложение Node.js никогда не будет работать, не поддерживая такие услуги, как Nginx Для прокси, Redis Для кэширования Elasticsearch Для индексации и полнотекстового поиска или постоянного хранения, как Монгодб или PostgreSQL. . Интеграции с этими услугами с Сематест так же просто, как добавление метрик Node.js. При выборе решения мониторинга Убедитесь, что вы можете создавать приборные панели со всеми этими метриками в одном месте. Имея способ показать вам обзор всех услуг, и их здоровье имеет решающее значение.
Увидев метрики для всех систем, которые окружают приложение Node.js, является драгоценным. Вот лишь небольшой пример мониторинга мониторинга Node.js, комбинирующих Node.js, nginx и Elasticsearch Metrics.
Упаковка ody.js Ключевые метрики
Мониторинг здоровья и производительности ваших приложений Node.js может быть трудно получить правильно. Node.js Ключевые метрики крепко связаны. Циклы сбора мусора вызывают изменения в памяти процесса и использование процессора. Сохранение глаз на эти метрики Node.js имеет решающее значение для поддержания вашего приложения и здорового при обслуживании ваших пользователей минимальной задержкой.
Это мои лучшие ключевые метрики Node.js для мониторинга. Не стесняйтесь, дайте мне знать в комментариях ниже того, что вы считаете важным.
Если вам нужно решение наблюдаемости для вашего программного стека, проверьте Sematext Cloud . Мы нажав на Открытый исходный код наши продукты и оказать влияние. Если вы хотите попробовать нас и следить за приложениями Node.js, Зарегистрироваться Чтобы получить 30-дневную пробую проб, или выберите свободный уровень сразу.
Оригинал: «https://dev.to/sematext/top-node-js-metrics-to-monitor-1id5»