Проблема

После выявления проблемы с лимитом inotify watchers возник следующий вопрос: какие процессы фактически потребляют этот ресурс?

Сам по себе факт достижения лимита оказался менее интересным, чем поиск его потребителей.

Симптомы

По умолчанию Linux показывает только настроенный лимит.

При этом операционная система не показывает, какие процессы используют inotify watchers.

Из-за этого диагностика быстро превращается в поиск вслепую.

Диагностика

Во время расследования стало очевидно несколько вещей.

Потребление inotify watchers редко связано с одним проблемным процессом.

Чаще всего нагрузка распределяется между множеством компонентов.

Наиболее частыми потребителями оказываются:

  • контейнерные рантаймы;
  • сборщики логов;
  • системы мониторинга;
  • service mesh;
  • приложения, отслеживающие изменения конфигурационных файлов;
  • Kubernetes-операторы.

По отдельности каждый из них выглядит безобидно.

В совокупности они могут постепенно создавать проблему.

Ещё одно наблюдение связано с характером роста потребления.

В отличие от скачков CPU или утечек памяти, количество inotify watchers может увеличиваться неделями или месяцами.

При этом никакие предупреждения не появляются.

Проблема становится заметной только тогда, когда неожиданно начинает некорректно работать операция, не связанная с первопричиной.

Выводы

Планирование ресурсов не должно ограничиваться только ресурсами Kubernetes.

Обычно внимание уделяется:

  • CPU;
  • памяти;
  • дискам;
  • плотности размещения подов на узле.

Однако системные лимиты Linux требуют такого же осознанного подхода.

fs.inotify.max_user_watches стоит рассматривать как ещё один ресурс инфраструктуры, а не как значение, которое можно навсегда оставить по умолчанию.

Отдельного внимания заслуживает долгосрочное наблюдение.

Текущего значения недостаточно.

Гораздо полезнее понимать, какие процессы постепенно увеличивают потребление inotify watchers с течением времени.