Das Linux procfs отображает текущее состояние ядра с помощью виртуальных файлов в каталоге /proc. Для администрирования особое значение имеют нагрузка, объем памяти, процессы, дескрипторы файлов и блочные устройства. Важно правильно интерпретировать эти данные: некоторые значения представляют собой моментальные снимки, другие — счетчики с момента загрузки или скользящие средние. Поэтому никогда не следует ориентироваться только на одно значение, а необходимо сопоставлять его с соответствующими сигналами и учитывать контекст хоста, виртуальной машины или контейнера.
Понимание procfs: виртуальное представление ядра вместо хранилища данных
Das procfs представляет собой виртуальную файловую систему: записи в каталоге /proc отражают структуры данных и состояния работающего ядра Linux. Они не хранятся в качестве постоянного содержимого на носителе данных. При чтении ядро формирует соответствующее представление на основе своего текущего состояния; например, после перезагрузки многие счетчики обнуляются. Поэтому /proc представляет собой интерфейс для наблюдения и частичного управления, а не место для хранения собственных файлов или постоянных настроек.
Для администрирования следует различать три области. Глобальные файлы состояния, такие как /proc/meminfo, /proc/stat или /proc/loadavg, предоставляют показатели, относящиеся ко всему ядру. Каталоги с числовыми именами, например /proc/1234, содержат подробные сведения об отдельном процессе. В каталоге /proc/sys, напротив, находятся параметры ядра, которые в зависимости от прав доступа и настроек могут быть доступны как для чтения, так и для записи. Сходство форматов файлов не должно вводить в заблуждение: запрос состояния и изменение настроек имеют принципиально разные последствия.
Набор доступных путей и полей не одинаков во всех системах Linux. На отображаемые элементы влияют версия и конфигурация ядра, архитектура, распознанное оборудование, а также загруженные модули. Кроме того, пространства имён изменяют отдельные представления. В частности, procfs, связанный с пространством имён PID, ограничивает представление процессов и PID; однако из этого не следует, что глобальные файлы автоматически отображают значения, специфичные для контейнеров или cgroup. Скрипты должны проверять файлы и поля перед тем, как анализировать их содержимое, вместо того чтобы предполагать наличие полной, везде одинаковой структуры procfs.
От этого следует отличать sysfs, расположенный в каталоге /sys: он в основном представляет устройства, драйверы и аппаратные объекты. Для распределения ресурсов и ограничений групп также имеет значение cgroup2. Однако procfs остается непосредственным источником информации о многих состояниях ядра и процессов, необходимых при первоначальной диагностике.
Правильно оценивать показатели, моментальные снимки и наглядность
Само по себе это значение редко объясняет проблему в procfs. Прежде всего, необходимо уточнить его временную привязку: некоторые данные являются накопительные счетчики с момента запуска системы, другие описывают текущее состояние, а третьи отображают скользящие временные интервалы. Высокое значение счетчика на первый взгляд указывает лишь на то, что с момента загрузки произошло некоторое количество событий. Частота формируется только на основе двух точек измерения: разница значений, деленная на промежуток времени между ними. Это относится, например, ко многим счетчикам ЦП, прерываний и носителей данных.
Файл /proc/uptime содержит информацию о прошедшем времени работы и совокупном времени простоя. Он помогает соотнести показатели счетчиков со временем с момента запуска, но не заменяет серию измерений. Однократный запрос представляет собой «моментальный снимок»; для получения достоверных выводов о тенденциях, пиковых нагрузках или повторяющихся нагрузках требуются повторные запросы с отметкой времени. При этом значения могут изменяться уже во время считывания, поскольку ядро продолжает работать.
Однако даже видимые данные имеют свои ограничения. /proc/self всегда указывает на процесс, который в данный момент развертывает путь. Благодаря этому он удобен для скриптов и интерактивных проверок, не требуя указания PID. Однако доступ к каталогам других процессов может быть ограничен правами доступа к файлам, возможностями Linux и опцией монтирования procfs hidepid может быть ограничен. Отсутствие доступа к некоторым данным в данном случае не является следствием неисправности procfs, а представляет собой меру защиты от считывания конфиденциальной информации о процессах.
Особую осторожность следует проявлять при работе с контейнерами. Система procfs, привязанная к пространству имен PID, отображает для путей, связанных с процессами, только процессы данного представления пространства имен. Глобальные файлы ядра, такие как /proc/meminfo, /proc/stat или /proc/diskstats, напротив, могут по-прежнему отражать значения хоста и не ограничиваются автоматически пределами контейнера. Поэтому перед любой диагностикой необходимо выяснить, касается ли вопрос процессов, глобальных значений ядра или фактически выделенных ресурсов; ограничения и использование ресурсов контейнера должны дополнительно анализироваться в рамках cgroup2.
Чтение, настройка и обеспечение безопасности в каталоге /proc/sys
Область /proc/sys — это представление файловой системы интерфейса sysctl. Чтение значения служит для диагностики. Запись, напротив, непосредственно изменяет поведение работающего ядра и может повлиять на работу служб, потребление ресурсов или функции безопасности. Тот факт, что изменение вступает в силу без перезагрузки, не означает, что оно безрисково и автоматически становится постоянным: сохранность зависит от выбранной конфигурации системы.
Структура каталогов облегчает первоначальную ориентацию. В каталоге /proc/sys/fs, среди прочего, находятся глобальные параметры файловой системы и дескрипторы файлов. Каталог /proc/sys/vm объединяет настройки управления памятью, а /proc/sys/net содержит сетевые параметры. Наличие тех или иных подкаталогов и ключей зависит, в свою очередь, от конфигурации ядра и функциональных возможностей системы. Поэтому наличие того или иного параметра не является универсальным рецептом для настройки; определяющими факторами являются его документация и конкретная рабочая нагрузка.
Примером, опровергающим кажущуюся оптимизацию, является drop_caches в каталоге /proc/sys/vm. В документации по ядру эта функция относится к разряду отладки и тестирования, и не рекомендуется использовать её для других целей, поскольку очистка повторно используемых кэшей может привести к снижению производительности. Недостаток свободной памяти сам по себе не является поводом для очистки кэшей: ядро сознательно использует ОЗУ также для файлового кэша.
Перед каждым изменением должна быть обоснованная причина. Сначала зафиксируйте исходное значение, задокументируйте цель и ожидаемые побочные эффекты, внесите изменения контролируемым образом, а затем проследите за соответствующими показателями и поведением службы. Заранее спланируйте обратный путь и вносите значение в постоянную конфигурацию только после профессиональной проверки. Более подробные сведения о параметрах и их контролируемом управлении приведены в статье Настройка ядра в Linux-хостинге: параметры Sysctl с первого взгляда.
Основные файлы procfs в разбивке по задачам администрирования
Выбор файла procfs должен исходить из административных соображений, а не из стремления получить как можно более полный список каталогов. Глобальные файлы часто содержат значения, относящиеся ко всему ядру, пути процессов описывают отдельный видимый процесс, а записи в /proc/sys/fs предоставляют настройки и системные ограничения. Некоторые значения отражают текущее состояние, другие — счетчики, накопленные с момента загрузки, или скользящие средние. Это различие определяет, достаточно ли одного считывания или потребуется два измерения.
| Путь | Назначение | Типичный вопрос | Характер данных | Важное ограничение | Безопасный запрос на чтение |
|---|---|---|---|---|---|
| /proc/loadavg | нагрузка системы | Есть ли задачи в очереди? | 1-, 5-, 15-минутные средние значения | Не только загрузка ЦП | cat /proc/loadavg |
| /proc/stat | Счетчики ЦП и ядра | Как распределяется время работы ЦП? | С момента запуска — в совокупности | Не следует оценивать показатель iowait в изоляции | grep -E ‚^(cpu|intr|ctxt|processes)‘ /proc/stat |
| /proc/meminfo | Обзор хранилищ | Есть ли свободное место на диске? | Текущие значения в памяти | Одного MemFree недостаточно; в контейнере не обязательно использовать cgroup-специфические настройки | cat /proc/meminfo |
| /proc/pressure/cpu | Задержки процессора | Задачи ожидают обработки процессором? | Временные интервалы и счетчики | Значение «full» на уровне системы не поддается интерпретации и выводится как нуль | cat /proc/pressure/cpu |
| /proc/pressure/memory | давление в аккумуляторе | Препятствует ли нехватка памяти выполнению задач? | Временные интервалы и счетчики | PSI должно быть доступно | cat /proc/pressure/memory |
| /proc/pressure/io | Задержки ввода-вывода | Задачи ожидают операций ввода-вывода? | Временные интервалы и счетчики | Не заменяет анализ оборудования | cat /proc/pressure/io |
| /proc//status | Статус процесса | Насколько масштабным и активным является процесс? | Текущие данные о процессе | Права и пространство имён PID могут ограничивать доступ | cat /proc/$$/status |
| /proc//fd | Открытые дескрипторы | Какие объекты удерживает процесс? | Актуальные символические ссылки | Наличие большого количества файлов FD не всегда означает утечку | ls -l /proc/$$/fd |
| /proc//maps | Виртуальные отображения | Какие области охватывает данный процесс? | Актуальный список картографирования | Для первоначального анализа часто слишком обширный | cat /proc/$$/maps |
| /proc/diskstats | Блочные устройства ввода-вывода | Какие устройства работают? | С момента запуска — в совокупности | Для расчета требуются две выборки; значения могут относиться ко всему хосту | cat /proc/diskstats |
| /proc/sys/fs/file-nr | Использование дескрипторов файлов | Сколько идентификаторов использует система? | Текущее значение счетчика и пороговое значение | В современных системах Linux среднее поле имеет значение нуль | cat /proc/sys/fs/file-nr |
| /proc/sys/fs/file-max | Ограничение на количество дескрипторов файлов | Какой глобальный верхний предел действует? | Активный параметр | Не путать с лимитом процесса | cat /proc/sys/fs/file-max |
Таблица служит ориентиром для начала работы, а не алгоритмом диагностики. Отклонение от нормы всегда требует независимого подтверждения: показатели нагрузки — данными о загрузке ЦП и ввода-вывода, показатели памяти — информацией о задержках давления, а показатели процессов — поведением службы. В частности, /proc/diskstats и /proc/stat являются накопительные счетчики; их разница в течение известного интервала даёт более полную информацию о нагрузке, чем абсолютное значение. В контейнерах необходимо дополнительно проверять, предоставляет ли файл глобальные значения ядра или представление, доступное для каждой cgroup. Поэтому в следующих разделах сигналы сгруппированы по нагрузке, памяти, процессам и вводу-выводу.
Нагрузка, ЦП и память: комплексная оценка сигналов
Если система работает медленно, /proc/loadavg — это хороший отправной пункт, но не окончательный вывод о загрузке ЦП. Эти три значения отражают среднюю загрузку за последние 1, 5 и 15 минут. В нагрузку включаются не только готовые к выполнению единицы в состоянии R, но и задачи в непрерываемом состоянии ожидания D, например, при операциях ввода-вывода. Четвёртое поле показывает количество задач, готовых к выполнению, по отношению ко всем существующим единицам планирования. Высокий Средняя нагрузка поэтому может свидетельствовать о конкуренции за ресурсы ЦП, заблокированных операциях ввода-вывода или об обоих факторах.

cat /proc/loadavg
grep -E '^(cpu|intr|ctxt|processes)' /proc/stat
cat /proc/meminfo
cat /proc/pressure/memoryСтроки, относящиеся к ЦП, из файла /proc/stat содержат доли времени, прошедшего с момента запуска системы, в единицах USER_HZ. Чтобы определить доли загрузки на их основе, необходимо сравнить два запроса; отдельное значение отражает лишь накопленное время. При этом значение iowait не является непосредственной мерой задержки для систем хранения данных: его расчёт имеет задокументированные ограничения и в определённых обстоятельствах может даже снижаться. Поэтому для определения причин, связанных с вводом-выводом, целесообразно дополнительно использовать значения устройств и показатели I/O-PSI.
Даже низкое значение MemFree ещё не свидетельствует о нехватке оперативной памяти. Linux целенаправленно использует неиспользуемую оперативную память для кэша. MemAvailable оценивает, сколько памяти, по прогнозам, смогут получить новые приложения без использования свопинга, и, как правило, более полезен для первоначальной оценки ситуации. Только когда показатель MemAvailable становится низким и одновременно возникают задержки в работе памяти, появляются явные признаки давление в аккумуляторе. Однако в контейнере эти глобальные значения памяти могут происходить от хоста; в случае гарантированных или ограниченных ресурсов дополнительно учитывается представление cgroup2.
Файлы в каталоге /proc/pressure дополняют эту картину. Для параметров memory и io значение «some» означает, что по крайней мере некоторые задачи не продвигались вперед в течение части временного интервала; значение «full» обозначает состояние, при котором все небездействующие задачи были одновременно заблокированы. Показатели avg10, avg60 и avg300 относятся к 10, 60 и 300 секундам соответственно, а «total» — это накопленный счетчик блокировок. Для CPU значение «full» на системном уровне семантически не определено и, начиная с Linux 5.13, по соображениям совместимости выводится как «null»; поэтому его не следует интерпретировать как диагностическое значение на системном уровне. Показатели PSI для CPU, памяти и ввода-вывода отвечают на разные вопросы и не должны использоваться взаимозаменяемо.
Если при низком значении MemFree служба работает медленно, сначала проверь MemAvailable и /proc/pressure/memory. Если оба показателя в норме, это свидетельствует об отсутствии острой нехватки памяти в системе. Затем файл /proc//status может показать, имеет ли данный процесс, например, высокое значение VmRSS, большое количество потоков или необычное состояние. Такая комбинация позволяет отличить нормальное использование памяти, связанное с нагрузкой на кэш, от проблемы, требующей дальнейшего анализа процесса.
Анализ процессов, дескрипторов файлов и ввода-вывода на носителях данных
Для безопасного выполнения упражнения с гарантированно существующим процессом $$ обозначает PID текущего шелла. Файл status более удобен для чтения человеком, чем ориентированный на поля файл stat. Имя идентифицирует процесс, State — его состояние, PPid — родительский процесс, а Threads — количество потоков. VmRSS — это быстрое приближение к объему резидентной памяти, учет RSS которой осуществляется масштабируемо и асинхронно, поэтому может быть неточным; VmSize, напротив, описывает виртуальное адресное пространство. FDSize описывает размер таблицы дескрипторов, но не обязательно количество текущих открытых записей. Добровольные и вынужденные смены контекста могут помочь в классификации поведения планировщика, но сами по себе не являются доказательством наличия ошибки.
cat /proc/$$/status
ls -l /proc/$$/fd
Каталог fd содержит символические ссылки на открытые файлы, каналы, устройства или сокеты. Он помогает, например, найти процесс, который по-прежнему держит открытым удаленный файл журнала. Однако большое количество открытых дескрипторов файлов вполне ожидаемо при использовании прокси-серверов, баз данных или событийно-ориентированных серверов. Для отфильтрованных представлений и сопоставления между процессами используется Использовать lsof для анализа открытых файлов подходящее дополнение. Строки команд из cmdline могут раскрывать конфиденциальные аргументы; environ является ещё более чувствительным из-за возможного наличия учетных данных или токенов и не подлежит рутинному запросу.
Команда `maps` выводит список виртуальных областей памяти с указанием прав доступа, смещения, устройства, инода и, при необходимости, пути. Команда `smaps` дополняет эту информацию подробными значениями содержимого памяти для каждого отображения и предоставляет более точную, но и более трудоемкую «моментальную фотографию» по сравнению с данными RSS. Оба файла предназначены для углублённого анализа памяти: их вывод может быть объёмным, а интерпретация отдельных отображений требует контекста. Для первоначального обзора обычно более эффективны команда status, а также системные файлы памяти и PSI.
При высокой нагрузке и низкой загрузке ЦП /proc/diskstats расширяет диагностику до уровня устройств. Этот файл ведёт накопленную статистику ввода-вывода для каждого блочного устройства. Чтобы оценить активность в виде скорости, необходимо сравнить два момента времени. При этом следует чётко различать физические диски, разделы и виртуальные устройства или устройства Device Mapper; счётчики разных уровней нельзя просто суммировать. Открытый файловый дескриптор процесса нельзя напрямую соотнести с счетчиком устройства diskstats: между ними находятся файловая система, кэш и уровни отображения. Тем не менее, совместно с /proc/pressure/io можно проверить, совпадают ли по времени наблюдаемые задержки ввода-вывода и активность устройств.
procfs в эксплуатации: запросы, мониторинг и защита данных
Для проведения повторяемой диагностики работы системы обрабатывай запросы procfs как точки измерения: записывай временные метки, системный контекст и конкретный запрос. Многие значения представляют собой накопительные счетчики с момента запуска; только разность двух значений, деленная на временной интервал, даёт показатель частоты. Это относится, например, к счетчикам из /proc/diskstats. Таким образом, отдельный запрос может свидетельствовать о наличии активности, но не позволяет достоверно оценить ни пропускную способность, ни устойчивое ухудшение показателей.
Система мониторинга должна с фиксированной периодичностью собирать, в частности, данные из /proc/meminfo, значения параметров оборудования из /proc/diskstats, отслеживать состояния процессов и системы, а также — при наличии поддержки ядра — сигналы печати. Он должен преобразовывать исходные значения в соответствующие единицы измерения, вычислять разности для счетчиков и сохранять историю данных. В контейнерах нельзя приравнивать глобальные значения procfs к ограничениям ресурсов рабочей нагрузки: пути процессов могут быть ограничены пространством имён PID, в то время как значения памяти или устройств частично отражают хост. Для определения ограничений и загрузки группы необходимы дополнительные метрики cgroup2. Только динамика во времени позволяет установить надёжные пороговые значения: высокое значение может быть нормальным, если оно соответствует ожидаемому диапазону нагрузки; внезапный скачок по сравнению с собственной базовой линией часто является более значимым. Доступные записи procfs зависят от запущенного ядра и его конфигурации.
Прямые файлы и инструменты дополняют друг друга. ps, top или htop подходят для интерактивного просмотра процессов; free, vmstat, iostat, pidstat, ss и sar В зависимости от конфигурации они подготавливают данные для решения конкретных задач. procfs по-прежнему целесообразно использовать, если вы хотите напрямую проанализировать исходный код ядра или создать небольшой понятный скрипт. Для оповещения и планирования мощностей данные временных рядов, как правило, являются более подходящим уровнем.
Ограничения видимости действуют даже при запросах, предназначенных исключительно для чтения. Права доступа, опции монтирования и пространства имён PID могут скрывать данные процесса или ограничивать их просмотр только контейнером. И наоборот, наличие собственного монтирования /proc не означает, что каждый глобальный файл ядра содержит только данные контейнера. Поэтому отсутствие записи о процессе или неожиданно высокое глобальное значение в первую очередь указывает на необходимость уточнить среду выполнения, параметры монтирования и контекст cgroup.
Алгоритмы диагностики медленной работы служб и перегрузки ресурсов
Устранение неполадок начинается с симптома, а не с отдельного значения, которое, как предполагается, является причиной. Затем проверьте как минимум один независимый сигнал и определите, касается ли наблюдаемое явление хоста, виртуальной машины или контейнера. Так, например, вы сможете избежать поспешного заключения, что высокая нагрузка является проблемой ЦП, или что большое количество открытых дескрипторов свидетельствует об утечке. Приведенные ниже пути представляют собой ориентировочные первоначальные диагнозы и не заменяют журналы, относящиеся к конкретным приложениям.
| Симптом | Сначала прочитать | Затем выполнить сверку | Как избежать неправильного толкования |
|---|---|---|---|
| Высокая нагрузка | /proc/loadavg | /proc/stat, /proc/pressure/io, /proc/diskstats | Нагрузка включает в себя задачи, готовые к выполнению, и задачи, находящиеся в режиме ожидания без прерывания, а не только работу ЦП. |
| Предполагаемое давление в накопителе | /proc/meminfo | /proc/pressure/memory, /proc//status | Низкое значение MemFree само по себе не свидетельствует о нехватке оперативной памяти; также учитываются показатели MemAvailable и Stalls. |
| Заметное время ожидания ввода-вывода | /proc/stat | /proc/pressure/io, /proc/diskstats в двух точках измерения | iowait не является прямым измерением задержки и имеет задокументированные ограничения. |
| Много открытых файлов | /proc/sys/fs/file-nr и /proc/sys/fs/file-max | /proc//fd, поведение службы | Многие показатели могут быть нормальными для сервера; гораздо важнее — пределы и темпы роста. |
| Служба не запускается | /proc//status, если запускается процесс | /proc//fd, журнал службы, занятые ресурсы | Невидимый процесс может быть завершен или работать за пределами видимого пространства имен PID. |
При высоком показателе средней загрузки сначала проверьте, что именно приводит к его росту: выполняемые или ожидающие задачи. Показатели загрузки отражают средние значения за 1, 5 и 15 минут и учитывают как состояния R, так и D. Поэтому сравнивайте поля времени ЦП с нагрузкой на ввод-вывод и активностью устройств только с осторожностью. В частности, iowait не следует рассматривать это в отрыве от задержки доступа к памяти.
При медленном выполнении и небольшом значении MemFree MemAvailable оптимальное значение контекста. Добавьте показатели PSI, характеризующие использование памяти, и состояние соответствующего процесса, например его VmRSS, количество потоков и состояние. В показателях PSI при оценке использования памяти и ввода-вывода проводится различие между some для частично заблокированных задач и full для полной блокировки задач, не являющихся холостыми. Отсутствие файлов PSI может быть связано с настройками ядра или окружающей средой; это не свидетельствует об наличии узкого места.
Для диагностики файлов и процессов могут применяться права и Пространства имён PID ограничивают информативность. В контейнерах /proc часто описывает только присвоенное пространство процессов. Поэтому в случае отказа в доступе или неполных каталогов необходимо проверить права пользователя, опции монтирования procfs и контекст пространства имён, прежде чем делать технические выводы на основании отсутствия данных.
Исправление типичных ошибочных представлений и выбор подходящих инструментов
Четыре типичных заблуждения в администрировании Linux часто приводят к принятию неверных мер. Немного MemFree не означает автоматически нехватку оперативной памяти, поскольку ядро использует память, в частности, в качестве кэша; для новых приложений показатель MemAvailable является более значимой оценкой. Высокая нагрузка не свидетельствует о перегрузке ЦП, поскольку в нее включаются также задачи, находящиеся в режиме непрерывного ожидания. Высокая доля iowait не отражает непосредственную задержку устройства хранения данных. Кроме того, procfs не везде одинаков: версия ядра, конфигурация, аппаратное обеспечение, модули и пространства имён влияют на файлы и поля.
Выберите метод в зависимости от задачи. Для точечного анализа причин используется procfs необработанные данные, поступающие непосредственно из работающего ядра. Для быстрого и понятного человеку обзора, как правило, более эффективны специализированные инструменты командной строки. Если важны тенденции, оповещения или решения о мощностях, вам нужен мониторинг, который сортирует точки измерения по времени, рассчитывает разницы в показателях и хранит исторические сравнительные данные. В случае ограничений ресурсов отдельных сервисов или контейнеров анализ на уровне cgroup дополняет глобальный обзор хоста; при соответствующей настройке PSI может быть доступно и на уровне каждой cgroup.
Особая сдержанность требуется в отношении /proc/sys. Чтение параметра — это диагностика, а запись изменяет поведение ядра в рабочем режиме. Изменяйте значение только в том случае, если причина понятна, исходное значение задокументировано, последствия можно наблюдать и определён путь возврата к исходному состоянию. Каталоги fs, vm и net группируют параметры по темам, но не дают универсальных рекомендаций по настройке.
Пример drop_caches показывает разницу между вмешательством и оптимизацией: в документации по ядру этот интерфейс описывается как неразрушающий, однако там содержится предупреждение о возможных проблемах с производительностью, и его не рекомендуется использовать в качестве обычной эксплуатационной меры за пределами сценариев тестирования или отладки. Поэтому следует руководствоваться следующим консервативным правилом: сначала провести измерения, затем внести обоснованное изменение в ограниченном объеме, проследить за эффектом и побочными эффектами и задокументировать принятое решение.
Источники и современное состояние исследований
Состояние поиска:
По состоянию на 22 сентября 2026 года. Видимые пути и поля procfs могут различаться в зависимости от версии ядра, конфигурации, аппаратного обеспечения, пространств имён и прав доступа. Документация ядра, использованная для описания drop_caches и сетевых параметров, привязана к конкретной версии; при использовании ядра другой версии следует ознакомиться с документацией по используемому ядру.
https://docs.kernel.org/filesystems/proc.html
https://docs.kernel.org/admin-guide/sysctl/
https://docs.kernel.org/admin-guide/sysctl/fs.html
https://docs.kernel.org/5.17/admin-guide/sysctl/vm.html
https://docs.kernel.org/7.1/admin-guide/sysctl/net.html
https://man7.org/linux/man-pages/man5/proc_loadavg.5.html
https://www.man7.org/linux/man-pages/man5/proc_stat.5.html
https://www.man7.org/linux/man-pages/man5/proc_meminfo.5.html
https://docs.kernel.org/accounting/psi.html
https://man7.org/linux/man-pages/man5/proc_pid_status.5.html
https://man7.org/linux/man-pages/man5/proc_diskstats.5.html


