vmstat



Предыдущая | Следующая

Среди множества инструментов, доступных для отслеживания производительно­
сти, команда vmstat является одним из самых старых, содержащих минимум необ­
ходимой информации. Она пригодится для получения высокоуровневого пред­
ставления о том, как часто ядро выполняет подкачку страниц, насколько загружен 
процессор и как используются ресурсы ввода/вывода.
Хитрость в овладении мощью команды vmstat состоит в понимании ее отчета. 
Вот, например, результаты работы команды vmstat 2, которая сообщает статистику 
каждые две секунды:

Этот вывод распределяется по таким категориям: procs — для процессов, 
memory — для использования памяти, swap — для страниц, которые перемещаются 
в область подкачки и из нее, io — для использования диска, system — для количе­
ства переключений ядра на его код и cpu — для количества времени, затраченного 
различными частями системы.
Приведенный выше пример типичен для систем, которые не выполняют много 
работы. Обычно следует начинать просмотр со второй строки — в первой содер­
жатся средние значения за все время работы системы. Например, в данном случае 
система переместила на диск (swpd) 320 416 Кбайт памяти, при этом свободно око­
ло 3 025 000 Кбайт (3 Гбайт) реальной памяти. Хотя некоторая часть области под­
качки использована, нулевые значения в столбцах si (swap­in, «входящая» подкач­
ка) и so (swap­out, «выходящая» подкачка) говорят о том, что в данный момент ядро не занято никаким из видов подкачки с диска. Столбец buff сообщает объем 
памяти, который ядро использует для дисковых буферов (см. подраздел 4.2.5).
В правом столбце с заголовком CPU можно увидеть распределение процессорно­
го времени (столбцы us, sy, id и wa). Они сообщают соответственно процентное 
соотношение времени, которое процессор тратит на задачи пользователя, систем­
ные задачи (задачи ядра), бездействие и ожидание ввода/вывода. В приведенном 
примере запущено не так много пользовательских процессов (они используют не 
более 1 % процессорного времени); ядро не делает практически ничего, в то время 
как процессор находится в бездействии 99 % всего времени.
Теперь взгляните, что происходит, если через некоторое время запускается 
большая команда (первые две строки появились перед самым запуском програм­
мы) 

Как следует из примера 8.3 (маркер ➊), процессор используется в течение 
продолжительного периода, в особенности пользовательскими процессами. По­
скольку свободной памяти достаточно, объем использованного кэша и буфера 
начинает возрастать, так как ядро применяет диск сильнее.
Чуть позже можно увидеть интересное (маркер ➋): ядро извлекает в память 
страницы из области подкачки (столбец si). Это означает, что команда, которая 
только что запустилась, запросила некоторые из страниц, используемых совместно 
с другим процессом. Такое встречается часто, многие процессы применяют код из 
определенных общих библиотек только при своем запуске.
Обратите также внимание на то, что столбец b сообщает о том, что некоторые 
процессы блокированы (им не разрешен запуск) в ожидании страниц памяти. В це­
лом количество свободной памяти уменьшается, но до ее нехватки еще очень да­
леко. Наблюдается также значительное количество дисковой активности, что от­
мечено увеличением значений в столбцах bi (blocks in, блоки «на входе») и bo 
(blocks out, блоки «на выходе»).
Результат будет совсем другим, если возникнет нехватка памяти. По мере 
уменьшения свободного пространства будут уменьшаться и размеры буфера 
с кэшем, поскольку ядру все в большей степени требуется пространство для 
пользовательских процессов. Когда не останется совсем ничего, вы увидите 
активность в столбце so («выходящая» подкачка), так как ядро начинает пере­
мещать страницы на диск. В этот момент практически все остальные столбцы 
вывода изменятся, чтобы отобразить количество выполняемой ядром работы. 
Вы заметите, что увеличилось системное время, больше данных перемещается на диск и с него, а также больше процессов заблокировано, поскольку память, 
которую они намерены использовать, недоступна (она перемещена в область 
подкачки).
Я объяснил не все столбцы вывода команды vmstat. Узнать подробности вы 
можете на странице руководства vmstat(8). Чтобы лучше их понимать, сначала 
может потребоваться узнать больше о том, как ядро управляет памятью: из лекций 
или книги вроде Operating System Concepts («Общие представления об операцион­
ных системах»), 9­е издание (Wiley, 2012).