Как я 8 дней ловил утечку памяти в Nuxt 3 SSR, и несколько раз думал, что починил
vadimbydanov 10 минут назад Как я 8 дней ловил утечку памяти в Nuxt 3 SSR, и несколько раз думал, что починил Средний 7 мин 115 VueJS * JavaScript * Node.JS * Веб-разработка * Кейс Всем привет. Я занимаюсь фронтендом в...
В сфере искусственного интеллекта произошло заметное событие. vadimbydanov 10 минут назад Как я 8 дней ловил утечку памяти в Nuxt 3 SSR, и несколько раз думал, что починил Средний 7 мин 115 VueJS * JavaScript * Node. JS * Веб-разработка * Кейс Всем привет. Я занимаюсь фронтендом в небольшой команде сервиса бронирования отелей.
Расскажу, как 8 дней ловил утечку памяти на проде, несколько раз думал, что починил, и каждый раз ошибался. Последний фикс был не в нашем коде, а в патче Vue, который через неделю апстрим откатил как регрессионный. В результате мы остались на одной патч-версии без утечки; обычный minor/patch update теперь для нас не безопасен без проверки heap-снапшотами.
Технические детали
x + TypeScript, SSR, Pinia, PM2 cluster, nginx перед Node. Обычный каталог отелей с тысячами SEO-страниц вида / /{подборка}. ВкратцеВ отчете Ahrefs тысячи 502 у ботов, у живых пользователей почти нет.
Снаружи 502, изнутри 200 — смерть воркера в момент запроса. Первая причина: SIGABRT от V8 по забытому --max-old-space-size от старого сервера. Лимит подняли, краши прекратились, память продолжала течь.
Дифф heap-снапшотов показал: в нашей связке Nuxt 3. x watch() в setup() на SSR оседает в heap без очистки. Известные апстрим-issue Vue/Nuxt — задеть может не каждого, у нас совпало.
Отраслевые последствия
Обернул клиентские watch в if (import. Ошибки у пользователей почти исчезли, скорость утечки осталась прежней. Вотчи оказались главным источником GC-давления, но не объясняли основной рост RSS.
Закрылось апгрейдом Vue до 3. 31 (апстрим-фикс SSR scope cleanup) и снятием серверных useFetch/useMediaQuery вотчеров. 32 фикс откатили как регрессионный.
31; следующий апгрейд Vue — только с повторной проверкой heap-снапшотами. До и послеДо, пикПосле, прошло 2 недели502 в час24440-1502/504 за день50 000 за 3-4 дня6RSS воркерадо 2907 МБ, ротация ~50 минплоские 350 мб, аптайм 14+ чРост RSS65 мб/минпила GC, дрейф ±2 мб/минCPU в простое27% (GC трешинг)2%Что видят ботыНачалось всё с отчета в Ahrefs: 1670 ссылок на наш сайт с кодом ответа 502 Bad Gateway. Боты сканируют сериями и попадают в 5-10 секундное окно недоступности воркера; реальный пользователь обновляет страницу через пару секунд и получает 200.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





