
Мой мониторинг аптайма сам нагенерил 932 фантомных падения
Ilya519 14 минут назад Мой мониторинг аптайма сам нагенерил 932 фантомных падения 10 мин 780 Python * DevOps * Системное администрирование * Высоконагруженные системы * Кейс И нет, это не очередная история про утечку...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Ilya519 14 минут назад Мой мониторинг аптайма сам нагенерил 932 фантомных падения 10 мин 780 Python * DevOps * Системное администрирование * Высоконагруженные системы * Кейс И нет, это не очередная история про утечку файловых дескрипторов. По крайней мере не классическая, когда дескрипторы текут по одному на каждый запрос. Был докеровский дефолт, который никто ни разу не тронул, и оптимизация, которая тихо размножилась в 60 раз.
У меня сервис мониторинга аптайма: тысяча с лишним чужих сайтов, которые он проверяет каждую минуту и шлёт владельцу алерт, если что-то упало. И вот в 07:28 он начинает рассылать алерты о том, что упало примерно всё. Мониторинг ИБП лежит.
Технические детали
За 25 минут система открыла 932 инцидента. Я был уверен, что поймал утечку дескрипторов. Оказалось, дело в одной ненастроенной строке конфига и в оптимизации, которая работала наизнанку.
Самое обидное тут даже не ложная тревога. Обидно, что сервис, вся работа которого отличать «упало» от «не упало», сам устроил себе ложный обвал на весь дашборд — 932 несуществующих падения за 25 минут. СторожTL;DRВ 07:28 UTC бэкенд начал ловить OSError: Too many open files — 4488 раз за 12 часов.
Проверки посыпались на всех протоколах сразу, мониторы поехали в ложный DOWN. Soft-лимит nofile в контейнере был 1024 (systemd-дефолт 1024:524288, унаследованный контейнером; в compose. yaml его не выставляли).
Отраслевые последствия
Hard при этом 524288, поднимать было нечего. Дескрипторы жрала не классическая утечка. 60 воркеров-корутин держали каждый свой httpx-пул, на лидере набегало под 120 пулов и 468 простаивающих keepalive-соединений, причём один и тот же адрес повторялся до 15 раз.
Чинил в два захода: сначала поднял лимит до 65536 и пересоздал контейнер, потом сделал один общий пул на процесс вместо 120. И повесил алерт на process_open_fds / process_max_fds, чтобы в следующий раз узнать заранее. Что вообще за сервисБез контекста дальше никак.
136, крутится под uvicorn 0. 41 в Docker на одной VM в Yandex Cloud под Ubuntu 24. Внутри живёт фоновый цикл проверок: пул из 60 воркеров (worker_count = 60, дефолт в конфиге) разбирает задачи из Redis-очереди и долбит health-чеки по чужим хостам.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





