Приложение Node.JS, работающее с проблемами производительности AWS - PullRequest
0 голосов
/ 28 сентября 2019

У меня некоторое время возникали неоднозначные проблемы с производительностью приложения NodeJS с приложением MYSQL. Короче говоря, некоторые запросы очень долго возвращали ответ браузеру. до 20 секунд, в некоторых случаях

с использованием chrome devtools для контроля времени, данные в столбце Time ниже показывают значительные различия между временем отклика для той же конечной точки .

enter image description here

Для дальнейшего изучения проблемы я настроил приведенный ниже код для одного из обработчиков конечных точек, чтобы отслеживать задержки в консоли. В этом примере яЯ запускаю приложение на локальном ПК и подключаю его к удаленной производственной базе данных на сервере.

async function getSomething(param) {
  const start = new Date().getTime();
  const something = await Model.where({ field: param }).fetch();
  const end = new Date().getTime();
  console.log('delay: ', end - start, 'ms');
  return something;
}

Я выполнил десять запросов к одной конечной точке , приведенные ниже данные показывают задержки, зарегистрированные в консоли VS время, необходимое для возврата данных в браузер.

числа в миллисекундах enter image description here

некоторые ответы возвращаются обратно в браузер практически без или с очень небольшой задержкой, как показано на втором и последнемстрока, тогда как некоторые другие запросы показывают существенную разницу во времени, которое требуется для извлечения данных из базы данных, и во времени, которое необходимо отправить в браузер.и это происходит в большинстве случаев.в некоторых других случаях для извлечения данных из базы данных требуется очень много времени, как показано в строке № 3.

различия для меня произвольны, что затрудняло поиск шаблона проблемы.


Вот снимок экрана с метриками экземпляра приложения с моей консоли Amazon. Это может помочь кому-то найти что-то, что может помочь.

enter image description here


Более того, я использую диспетчер процессов PM2 для управления приложением на сервере, и это еще один снимок экрана анализа метрик приложения.

enter image description here

Я был бы очень признателен, если бы кто-то указал пальцем на то, куда еще я мог бы обратиться, чтобы определить и устранить проблему.

заранее спасибо.

1 Ответ

2 голосов
/ 28 сентября 2019

Я подозреваю, что приложение nodejs выполняет несколько длительных синхронных операций, которые останавливают цикл обработки событий.Это можно увидеть на относительно большой задержке цикла событий на скриншоте PM2.

Это может произойти из-за:

  • Код выполняется во время выполнения вычислительных операций, используя
  • некоторые функции синхронизации для доступа к внешним ресурсам, например, fs.readFileSync

Это может происходить при обработке других параллельных запросов или таймеров, не связанных с отлаживаемым запросом.

Приложение nodejs запускается в одном потоке и зависит от того, что все пути кода возвращаютбыстрый переход к циклу событий, чтобы он мог обрабатывать следующее событие.

Я предлагаю профилировать приложение (https://nodejs.org/en/docs/guides/simple-profiling/) и искать функции с наибольшим сроком действия и концентрироваться на функциях, занимающих много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...