Итак, у нас было клиентское приложение. Приходит клиент, говорит, АЛЯРМА, КАЖДУЮ НОЧЬ НА ПРОДЕ ПРИЛОЖЕНИЕ ПАДАЕТ!
И начинается наше приключение длиной в несколько недель...
Начинаем разбираться.
Реально, согласно мониторингу приложение частично лежит в ночи, с 3 ночи до 5.
В это же время потребление CPU уходит под предел лимитов.
Повышаем CPU — оно выжирает целиком 1 проц (именно ночью! днём нормально работает!) и выше не растёт. Ну тут мы сразу поняли: nodejs, параллелиться по ядрам не умеет.
Просыпаемся в ночи, смотрим что такое. Приложение убивают liveness пробы, поэтому вырубаем пробы — приложение не падает, но в метриках всё ещё пусто, в логах пусто, вообще ничего не видно. Приложению настолько плохо, что оно вообще ни на что не реагирует и ничего не делает.
Пытаемся добраться до того, что же оно там делает.
Смотрим, что прилетает из кафки — может там какой-то батч в ночи присылают им огромный, который кладёт приложение? В пользу этого говорит то, что после 5 утра (когда залипалово заканчивается) приложение согласно логам выдает дальше по процессу море данных из кафки.
Изучение взаимодействия с кафки не даёт примерно нифига.
Делаем хуёмболу, которая следит за блокировкой event loop (это такая херня в js, когда он не может переключиться на другую "асинхронную" задачу из-за того, что залип на чём-то). Аккуратно врубаем хуёмболу.
Видим, что происходит блокировка event loop на 7200000 (!!!!!) миллисекунд.
Очень заинтригованные лезем изучать код приложения.
А там… кастомная реализация функции sleep, в которой написано крутиться в бесконечном цикле если время на часах — с 2 часов ночи до 5.
Post #446
3.21K
- 🔥 34
- 🤯 30
- 🎉 5
- 💩 3
- 🤣 1