Пиковое использование ЦП node.js

У меня есть приложение express.js, работающее в кластерном режиме (кластерный модуль nodejs) на производственном сервере Linux. Я использую PM2 для управления этим приложением. Обычно он использует менее 3% ЦП. Однако иногда загрузка ЦП резко возрастает до 100 % в течение короткого периода времени (менее минуты). Я не могу воспроизвести эту проблему. Это происходит только раз в день или два. Есть ли способ узнать, какая функция или маршрут вызывают внезапные всплески ЦП, используя PM2? Спасибо.

Вы указали производственную среду при запуске процесса PM2?

Alaindeseine 26.11.2022 17:15

@Alaindeseine Да, я указал производство NODE_ENV в файле экосистемы.config.js.

Sujith S Manjavana 27.11.2022 08:46

У меня была такая же проблема в службе приложений Azure с помощью экспресс-приложения.

Ibrahim shamma 27.11.2022 14:27

Вы заметили, что журналы растут, когда процессор поднимается на 100%? Или не ? Вы также проверили размер журналов PM2?

Alaindeseine 28.11.2022 10:26

Есть ли у вас также показатели памяти, и вы видите что-нибудь примечательное, происходящее с диаграммой памяти одновременно с диаграммой ЦП?

Aurast 30.11.2022 02:58

Использование памяти в норме

Sujith S Manjavana 30.11.2022 16:23
Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
1
6
127
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Мой ответ основан исключительно на моем опыте в этой теме

  1. Перед запуском в производство проведите локальное тестирование, например:
  • нагрузочное тестирование.
  • испытание на долговечность.

Для обоих тестов попробуйте использовать такой инструмент, как JMeter, где вы можете разместить одну или несколько конечных точек и запускать их множество за определенный период времени, отслеживая использование ЦП и ПАМЯТИ.

  1. Если все в порядке, попробуйте также остановить тест и запустить апи вручную, попробуйте следить за его поведением, это поможет вам, если есть memory leak из самих API
  2. Ваше приложение проходит .map() , .reduce() для огромных массивов?
  3. Ваше приложение работает значительно лучше после reboot? если да, то вам нужно подозревать, что экспресс-приложение испытывает memory leak, а сборщик мусора пытается навести порядок.
  4. Если есть возможность, попробуйте переписать приложение с помощью fastify, лично это не сделало приложение намного быстрее, но способно обрабатывать 1.5X больше запросов.
Ответ принят как подходящий

Я думаю, что у вас есть медленное синхронное выполнение по какому-то запросу в вашем приложении.

Другие вопросы по теме