Веб-приложение Node, запущенное в Fargate, аварийно завершает работу под нагрузкой, когда память и процессор относительно не облагаются - PullRequest
0 голосов
/ 05 октября 2019

Мы запускаем веб-приложение Koa в 5 контейнерах Fargate. Они довольно простые API REST / REST с Koa над Mongo Atlas. Мы начали проводить тестирование емкости и заметили, что серверы узлов начали значительно замедляться с большим запасом свободного пространства на процессоре (на уровне 30%), памяти (на уровне или ниже 20%) и Mongo (по-прежнему возвращающихся менее 10 мс).
Чтобы дополнительно проверить это, мы удалили операции Монго и просто забили наши конечные точки проверки здоровья. Мы видели большую пропускную способность, но при 25% ЦП произошла значительная деградация, а на 40% ЦП произошел сбой Node.

Наши задачи (контейнеры) в fargate: ЦП: 2048 (2 «виртуальных ЦП») и память4096 (4 концерта). Мы увеличили наш ulimit nofile до 64000, а также установили max-old-space-size равным 3,5 ГБ. Это не привело к значительной разнице.

Мы также не видим значительных задержек в нашем балансировщике нагрузки.

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

1 Ответ

0 голосов
/ 07 октября 2019

Основная проблема заключалась в том, что мы запускали контейнеры с 2 процессорами. Поскольку Node эффективно использует только один ЦП, всегда было определенное количество ЦП, которое никогда не использовалось. Вспомогательные накладные расходы так и не достали контейнер до 100%. Таким образом, узел будет перегружен на 1 процессор, а другой в основном простаивает. Это привело к тому, что наши автоматические сигналы тревоги не сработали. Таким образом, он настроен на контейнеры с 1 процессором и увеличен горизонтальный масштаб (то есть больше экземпляров).

...