- Замечательная утилита 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. Благодаря этому повышается вероятность, что на этот раз наш патч будет принят.