Поделитесь опытом, как вы дебажите ноду?  Публичный пост

Сап, клуб! На рабочем проекте нода жрёт CPU как не в себя, хотя по большому счёту, на ней только vue-ssr. Как итог, очень хреновенький рпс.

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

Пока успел прочитать гайд по встроенному профайлеру и ещё несколько статей из гугла, но ощутимых результатов мне это не принесло, продолжаю гуглить :)

5 комментариев 👇
Ruslan Yuldashev, Тим-лид разработки, консультант, разработчик 13 августа 2020

Один раз пришлось искать почему нода съедает все процы, получилось найти по этому гайду https://medium.com/voodoo-engineering/node-js-and-cpu-profiling-on-production-in-real-time-without-downtime-d6e62af173e2

В частности достаточно было запустить приложение с — prof И потом изучать аутпут - в нем в визуально можно найти паттерны подозрительные, чаще всего бесконечные циклы. У меня это происходило в стороннем модуле, который парсил html.

  Развернуть 1 комментарий
Egor Ogarkov, Senior Software Engineer 13 августа 2020

То что потребляется CPU явно говорит о том, что у тебя какая CPU-intensive задача (какие расчеты например), в чем нода, мягко говорят, плоха.
Я писал сервисы на node и когда нужно было решать проблемы производительности мне хватало использования команды node --inspect <file>. Так можно профилировать прямо из хрома.
Лучше опиши проблему точнее и что за сервер, что он делает.

  Развернуть 1 комментарий

Сервер рендерит html из вуёвых компонентов и отдаёт их на фронт. За данными для рендера ходит в несколько отдельных сервисов по gql.

Но история такая, что с ростом числа реквестов, херово становится только ноде (цпу, респонс тайм, память). Остальные сервисы не показывают пропорциональный рост потребления ресурсов и справляются с нагрузкой.

  Развернуть 1 комментарий

КМК, самое годное что есть это https://www.npmjs.com/package/debug, в самом простом случае расставляешь дебаги и смотришь что сколько занимает времени, можно неймспейсить дебаг-пойнты для более детального разделения по функционалу: как мне видится самое простое это неймспейснуть запросы в бд и бизнес-логику, тогда сразу будет видно, что именно боттлнечит

  Развернуть 1 комментарий

https://clinicjs.org/ набор достаточно удобных инструментов профайлинга

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб