$put_perv_real = "/home/www/dvakompa-ru/dopol/"; ?>
Среди множества инструментов, доступных для отслеживания производительно
сти, команда vmstat является одним из самых старых, содержащих минимум необ
ходимой информации. Она пригодится для получения высокоуровневого пред
ставления о том, как часто ядро выполняет подкачку страниц, насколько загружен
процессор и как используются ресурсы ввода/вывода.
Хитрость в овладении мощью команды vmstat состоит в понимании ее отчета.
Вот, например, результаты работы команды vmstat 2, которая сообщает статистику
каждые две секунды:
Этот вывод распределяется по таким категориям: procs — для процессов,
memory — для использования памяти, swap — для страниц, которые перемещаются
в область подкачки и из нее, io — для использования диска, system — для количе
ства переключений ядра на его код и cpu — для количества времени, затраченного
различными частями системы.
Приведенный выше пример типичен для систем, которые не выполняют много
работы. Обычно следует начинать просмотр со второй строки — в первой содер
жатся средние значения за все время работы системы. Например, в данном случае
система переместила на диск (swpd) 320 416 Кбайт памяти, при этом свободно око
ло 3 025 000 Кбайт (3 Гбайт) реальной памяти. Хотя некоторая часть области под
качки использована, нулевые значения в столбцах si (swapin, «входящая» подкач
ка) и so (swapout, «выходящая» подкачка) говорят о том, что в данный момент ядро не занято никаким из видов подкачки с диска. Столбец 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).