Медленный atop

13 октября 2018

  • Замечательная утилита atop имеет серьёзный недостаток — медленное чтение списка процессов, если приложения активно используют многопоточность.
  • Ошибка вызвана двумя причинами:
    • начальный размер списка процессов и потоков берётся пропорциональным количеству процессов БЕЗ учёта количества потоков,
    • при переполнении списка его размер увеличивается на 100 элементов и чтение начинается заново.
  • Наше исправление заключалось в следующем:
    • для определения начального размера списка мы подсчитываем и процессы, и потоки
    • если список переполнился (например, если во время чтения успело запуститься большое количество потоков), его размер увеличивается вдвое.
  • Все наши сборки atop в http://repo.docker.ru/pub/linux/centos/7/x86_64/ его содержат, начиная с 2016 года.
  • Разумеется, патч был отправлен автору atop. К сожалению, с нулевым успехом.
  • Кроме того, даже после исправления работа atop осталась относительно медленной, т.к. информация о процессах и потоках читается в нём через медленный по определению /proc.
  • По этой причине для просмотра текущего состояния системы мы стали предпочитать Glances (его сборки теперь тоже есть в repo.docker.ru).

После версии 2.3:

  • В 2017 году автор вынес часть кода из atop.c в несколько файлов. Для нас это означает, что для следующих версий патч придётся переписать.
  • Кроме того, автор переместил разработку на Github. Благодаря этому повышается вероятность, что на этот раз наш патч будет принят.


← Назад в Блог