Команда vmstat linux описание

Команда vmstat для начинающих

Оригинал: Linux vmstat Command Tutorial for Beginners (5 Examples)
Автор: Himanshu Arora
Дата публикации: 10 октября 2018 года
Перевод: А. Кривошей
Дата перевода: июль 2019 г.

Если вы ищете утилиту командной строки, которую вы можете использовать для доступа к информации о процессах, активности процессора, памяти и т. д., вам будет приятно узнать, что такая утилита есть, и она называется vmstat.

В данной статье мы обсудим основы использования этой утилиты, используя несколько простых для понимания примеров. Необходимо отметить, что все примеры в этой статье были протестированы на машине с Ubuntu 18.04 LTS.

Команда vmstat

Команда vmstat в Linux выводит статистику использования виртуальной памяти. Ниже приводится ее синтаксис:

И вот как справочная страница утилиты объясняет ее работу:

vmstat сообщает информацию о процессах, памяти, виртуальной памяти, вводе-выводе, дисках и активности процессора.

В первом отчете приведены средние значения с момента последней перезагрузки. В дополнительных отчетах содержится информация с выборкой за определенный промежуток времени. Отчеты о процессе и памяти являются мгновенными в любом случае.

Ниже приведены примеры в стиле вопросов и ответов, которые должны дать вам лучшее представление о том, как работает команда vmstat:

Q1. Как использовать vmstat?

В базовом варианте вы просто выполняете команду vmstat без всяких опций.

Например, в моем случае приведенная выше команда дала следующий вывод:

Как показывает первая строка, выходные данные разделены на шесть разделов. Справочная страница утилиты содержит подробную информацию об этих значениях. Вот выдержка:

Procs
r: количество запущенных процессов (работающих или ожидающих выполнения).
b: количество спящих процессов.

Memory
swpd: объем используемой виртуальной памяти.
free: объем свободной памяти.
buff: количество памяти, используемой в качестве буферов.
cache: объем памяти, используемой в качестве кеша.
inact: количество неактивной памяти (опция -a).
active: количество активной памяти. (опция -a)

Swap
si: объем памяти, выгруженный с диска (/s).
so: объем памяти, перенесенный на диск (/s).

IO
bi: блоки, полученные от блочного устройства (blocks/s).
bo: блоки, отправленные на блочное устройство (blocks/s).

System
in: количество прерываний в секунду, включая часы.
cs: количество переключений контекста в секунду.

CPU
Здесь проценты от общего времени процессора.
us: время, потраченное на запуск кода, не относящегося к ядру (время пользователя).
sy: время, потраченное на выполнение кода ядра (системное время).
id: время бездействия. До версии Linux 2.5.41 это включает время ожидания ввода-вывода.
wa: время, проведенное в ожидании ввода/вывода. До Linux 2.5.41, включено в idle.
st: время, украденное из виртуальной машины. До Linux 2.6.11 неизвестно.

Q2. Как заставить vmstat автоматически обновлять свой вывод?

По умолчанию vmstat выдает выходные данные один раз. Однако, если вы хотите, чтобы vmstat автоматически обновляла свои выходные данные, вы можете сделать это, указав числовое значение в качестве входных данных для команды.

Это числовое значение действует как задержка (в секундах), после которой вывод обновляется. Например:

Таким образом, вывод vmstat будет обновляться каждые 3 секунды.

Q3. Как заставить vmstat отображать slabinfo?

Для slabinfo вам нужно использовать параметр командной строки -m. Обратите внимание, что ядро вашего дистрибутива Linux должно поддерживать slabinfo, чтобы эта опция работала. Если поддержка есть, вам нужно запустить команду с привилегиями sudo.

Например, в моем случае выдержка из полученного вывода:

Q4. Как сделать отчет об активности диска с помощью vmstat?

Используйте для этого параметр командной строки -D.

Вот вывод этой команды в моей системе:

Q5. Как заставить vmstat добавлять временную метку к каждой строке вывода?

Чтобы команда vmstat добавляла временную метку к каждой выходной строке, используйте командную строку -t:

Выделенные записи показывают метку времени, включенную в каждую строку.

Читайте также:  Ноут сам включается windows 10

Заключение

В зависимости от того, какую работу вы выполняете в командной строке Linux, команда vmstat может оказаться действительно полезной для вас. Помимо опций, обсуждаемых здесь, есть много других опций командной строки, которые предлагает эта утилита. Отправляйтесь сюда, чтобы узнать больше.

Источник

vmstat, sar и первичная диагностика производительности

Unix-системы имеют несколько замечательных встроенных утилит для диагностики проблем производительности. Можно удивиться, узнав, сколь многое говорит о системе буквально дюжина параметров, выдаваемая встроенной командой vmstat!

К сожалению, особенно при самостоятельном изучении Linux, понимание vmstat часто относится к области высоких академических знаний и не заслуженно игнорируется. Ситуация усугубляется еще и тем, что ряд заметок и тредов на данную тему содержат предположения, довольно далекие от реальности.

Попробуем исправить это недоразумение 😉

Это типичный вывод команды vmstat, с по-секундной выборкой и имитацией дисковой нагрузки, которая начинается с небольшой задержкой.

Виртуальная память

Для начала стоит пробежаться по концепции виртуальной памяти Linux.

Paging

В Linux загрузка программных модулей в оперативную память, а также выполнение дисковых операций через memory-mapped файлы осуществляется посредством отображения дисковых файлов на регионы виртуальной оперативной памяти. При этом физического чтения/записи данных, равно как и выделения под них места в физической оперативной памяти, не происходит до момента обращения к ним.

Когда ядро или программа обращается к не существующей странице отображенной памяти, контроллер памяти генерирует прерывание Major Page Fault (MPF). В ответ, ядро выделяет физическую страницу памяти для размещения данных и загружает в нее блок с жествого диска. Страница памяти, выделенная для хранения этого блока данных, помечаетcя как «cached» и даже после использования остается в оперативной памяти.

При повторном обращении к этому блоку (даже из другого процесса) возникнет Minor Page Fault (MnPF) и данные запросившему процессу будут предоставлены из cached-страницы, без непосредственного обращения к диску.

При записи на диск, данные помещаются в cached-страницу, страница помечается как «грязная» (dirty), и вскоре планировщик ввода-вывода (pdflush) синхронизирует ее на диск.

Чем больше обращений к диску, тем больше растет cached-память, многократно увеличивая эффективность дисковых операций. Одновременно уменьшается свободная оперативная память (free). Поэтому в типичной нагруженной системе количество неиспользуемой «свободной» памяти обычно очень не велико и это свидетельствует об эффективности работы виртуальной памяти.

Cached-память считается свободной и суммируется с free при вычислении реального количества свободной оперативной памяти в системе.

Что происходит, когда системе требуется оперативная память? Cached-страницы, не помеченные «грязными», просто удаляются — ведь их всегда можно обратно прочитать с диска!

Этот процесс называется paging и его измеряют в количестве страниц, загружаемых в память (page-in) и выгружаемых из памяти (page-out).

Swap и swapping

В старых *nix системах процесс swapping’а был связан с выгрузкой всей памяти какого-либо процесса на диск. В Linux все гораздо менее драмматично.

Любой процесс, помимо данных, отображаемых на диск имеет «анонимную» оперативную память — ту, в которой динамически размещаются структуры данных и происходят вычисления. При необходимости освобождения оперативной памяти, анонимные страницы памяти отображаются на дисковые блоки, расположенные на swap-разделе, выгружаются в них и затем освобождают оперативную память, в точности как при paging-е обычных дисковых данных.

Собственно, swapping и является частью процесса paging-a, однако, если при отображении реальных файлов, освобождение cached-памяти происходит безболезненно, swapping порождает page-out операцию (swap-out), связаную с выгрузкой части used-памяти на диск (swap-раздел), занимает изрядное время и, конечно, увеличивает значение swapped в статистике использования памяти.

Таким образом, будучи взяты в «статике», в отрыве от контекста, значения swap-out, swap-in, cached и swapped не говорят ни о чем. Система имеет право вытолкать в swap какую-то не слишком нужную информацию и даже имеет право кратковременно ошибиться в выборе. Однако, если данные параметры активно меняются в течение длительного времени, это будет тревожный признак.

Немного о вводе-выводе

Операции ввода-вывода в большинстве случаев осуществляются не через механизм отображения памяти, а операциями read()/write(). Это универсальный способ, который подходит не только для блочных устройств, но и для устройств последовательного доступа и для сетей передачи данных.

Данные, которые читаются и пишутся подобным образом, используют буферизацию ввода-вывода. В самом деле, к примеру — бывает, что программа способна накидать много данных и даже закончить свою работу (или прерваться на время), а медленное дисковое устройство все еще будет их принимать.

Читайте также:  Windows 10 как настроить цвет окон

Для операционной системы, при наличии свободного места в памяти, выгоднее принять эти данные максимально возможной порцией и дать программе заниматься чем-то еще, пока другие процессы спокойно пишут на устройство.

В таких случаях из свободной оперативной памяти выделяется пространство под «буферы» (buffers), которые также могут раздуваться и освобождаться и считаются потенциально частью реально свободной оперативной памяти.

В то же время, так же как и с Cached-памятью, если система осуществляет массивный ввод-вывод, невозможность роста buffers будет приводить к тому, что процессы будут чаще ожидать окончания операций ввода-вывода, вместо выполнения полезной нагрузки.

Параметры vmstat

r — количество процессов, стоящих в очереди на выполнение процессором. В это количество не входят процесы, находящиеся в режимах ожидания различных событий (как то , ввод с терминала, дисковый и сетевой ввод-вывод и т.п.). Усредненное значение этой величины называется Load Average и его можно видеть в выводе команд top и uptime. Высокое значение r (и LA) говорит о том, что системе потенциально не хватает производительности.

b — количество процессов, заблокированных на операциях дискового ввода-вывода, которые требуют заверщения. Параметр обычно коррелирует с другим параметром — wa (I/O Wait, о котором ниже).

swpd — размер использованного swap (однако, не уверен, что после обратного swap-in, размер swpd должен уменьшиться).

free, buff, cache — составляющие свободной оперативной памяти, которые обсуждались выше.

si, so — swap-in и swap-out, количество page-in и page-out операций на swap-разделы.

bi, bo — число блоков полученных и отправленных в блочные устройства.

in — interrupts, число прерываний, обслуживаемых ядром. К примеру, дисковый ввод-вывод и прочая работа с аппаратными устройствами способна породить массу прерываний.

cs — context switches, фактчески — количество переключений между задачами.

us, sy, id, wa — user, system, idle, io wait, составляющие процессорного времени, в процентах. Для полностью загруженной системы адекватным считается распределение: 65-70%/30-35%/0-5%/0% (от сюда).

I/O Wait

Отдельного внимания заслуживает параметр wa — I/O Wait.

Он показывает время, которое процессы проводят в ожидании завершения дисковых операций, в то время, как если бы диски работали по-быстрее, процессы могли бы тоже ускориться.

Обычно, этот параметр может коррелировать с параметром «b» — число поцессов, ожидающих ввода вывода. Однако, к примеру, в ситуации, когда на ввод-вывод напрягается только один процесс, параметр «b» может и не подниматься слишком сильно.

Разбор полета

На приведенном в начале статьи примере vmstat, запущенного изначально на спокойной системе, можно видеть, как в момент начала операции dd, вызвавшей большой объем последовательного чтения, система затребовала максимум памяти под буферы ввода-вывода (buffers), для чего была задействована свободная память (free), освобождены кэши (cached), и даже что-то выгружено в swap (причем, судя по si, что-то было выгружено по ошибке).

В реальной жизни часто бывает, что требуется посмотреть vmstat на агонизирующей системе, когда что-либо понять и исправить уже поздно, или даже уже после того, как ситему перезагрузили.

Это возможно. Достаточно заблаговременно установить в систему программу sar (в Debian/GNU Linux — пакет sysstat). Читайте мануалы.

Источник

Как узнать загрузку процессора и памяти в Linux — команда vmstat

Производительность (или непроизводительность) систем очень сложно оценивать «на глаз» или даже с секундомером. Ведь даже если это и получится, то из виду будут упущены ключевые детали, предоставляющие информацию о том, почему производительность может быть именно такой, а не больше (или меньше). Для выяснения причин стоит углубиться в анализ этой самой производительности более основательно. И для этих целей существуют специализированные утилиты, одной из которых является vmstat – довольно популярный инструмент (после команды top разве что), которым пользуются многие системные администраторы Linux.

Как нужно оценивать производительность?

Вообще, производительность и/или быстродействие — величины постоянные только для конкретного (и довольно короткого) промежутка времени для конкретной системы. Для более объективной оценки необходимо проводить многочисленные «замеры» в разное время в течении довольно длительного (месяц и более) периода.

Немаловажно и то, что анализ следует проводить без использования всевозможных «синтетических» тестов — т. е. только в условиях реальной и пиковой нагрузки, возникающей во время реальный задач, предусмотренных техпроцессом, регламентом в рамках реальной «производственной» необходимости. Очень часто именно в таких условиях можно выявить ошибки в конфигурации системы, приводящие к ограничениям в использовании программно-аппаратных ресурсов.

Читайте также:  Workgroup windows 10 переименовать

Синтаксис команды vmstat

Утилитой vmstat можно анализировать не только использование процессора, но также память — оперативную и/или дисковую. Синтаксис команды следующий:

Основными аргументами являются delay – время (в секундах), в течение которого следует производить замер, а также count – количество замеров или отчётов. Если дать команду vmstat без указания количества замеров, то она будет выводить отчёты, пока не будет прервано её выполнение сочетанием клавиш .

Вывод vmstat разбит на столбцы, которые объединены в следующие категории:

  • procs – информация о процессах;
  • memory – состояние оперативной памяти;
  • swap – состояние виртуальной памяти (раздел или файл подкачки);
  • io – активность устройств хранения (диски, флешки и т. д.);
  • system – общая активность системы;
  • cpu – использование центрального процессора.

Как уже было отмечено выше, эти категории объединяют колонки из вывода vmstat по соответствующему типу информации. Стоит рассмотреть их по отдельности. Для раздела procs:

  • r – количество процессов в обрабатываемой процессором очереди;
  • b – количество процессов, стоящих в очереди на выполнение операций ввода/вывода.

Для раздела memory:

  • free – размер свободной памяти. То же значение, которое определяется командой free;
  • swpd – количество блоков, которые были перемещены в Swap;
  • buff – буферы памяти;
  • cache – кеш памяти.
  • si – общее количество блоков, считываемых системой из Swap;
  • so – общее количество блоков, перемещаемых системой в Swap.
  • bi – количество блоков в секунду, считываемых с диска;
  • bo – количество блоков в секунду, записанных на диск.
  • in – частота (количество в секунду) системных прерываний;
  • cs – частота переключений между задачами.
  • us – используемое (в процентах) время для выполнения «пользовательских» (т. е. не принадлежащих ядру) задач;
  • sy — используемое (в процентах) время для выполнения задач ядра;
  • id – время (в процентах) в простое;
  • wa — время (в процентах), отведённое на ожидание операций ввода/вывода.

Опции vmstat

Доступные для vmstat опции приведены в следующей таблице:

Опция Назначение
-a, — active Выводит активную и неактивную память. Доступно начиная с ядра версии 2.5.41 и выше.
-f, — forks Выводит количество системных вызовов fork, vfork и rfork, а также страниц виртуальной памяти, используемых этими вызовами.
-m, — slabs Количество используемой динамической памяти для ядра.
-n, —one-header Отображает заголовок таблицы результатов только один раз, а не периодически.
-s, — stats Переключение режима отображения вывода.
-d, — disk Выводит статистику использования диска.
-w Для больших объёмов данных увеличивает визуально ширину столбцов.
-p, — partition device Выводит статистику использования раздела. Необходимо указывать раздел device.
-S, —unit character Выводит статистику в указанных единицах [k, K, m, M] – в килобитах, килобайтах, мегабитах и мегабайтах соответственно.
— t, —timestamp Добавлять к выводу время замеров.
— D, —disk-sum Выводит общую статистику по использованию дисков.

Примеры использования vmstat

Несмотря на то, что опции vmstat и позволяют получить ценные сведения, однако в большинстве случаев системные администраторы их практически не используют. Чаще всего использование vmstat сводится к следующему (что вполне достаточно):

Вообще, сервер общего назначения считается хорошо отбалансирован в плане нагрузки, если около 50% времени он тратит на обработку пользовательских задач и ещё столько же — на работу системных вызовов, взаимодействующих с ядром. Простои в системе должны быть — это потенциал для увеличения нагрузки, но в то же время они (простои) не должны быть слишком большими — это значит, что мощности сервера расходуются впустую.

Из приведённого примера следует, что центральный процессор практически постоянно переключается между высоконагруженными режимами и периодами почти полного простоя. Таким образом, можно сделать вывод, что необходима настройка используемого в работе сервера ПО и системной конфигурации для более равномерного распределения нагрузки.

Заключение

Как можно видеть, даже без использования графических приложений с графиками и диаграммами, обычная команда vmstat способна дать наглядную картину происходящего, касающегося использования ресурсов системы. Ну а самые объективные и достоверные результаты анализа производительности могут зависеть от применяемой для каждого конкретного случая методики.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Оцените статью