В пятой статье из цикла “Системные данные с помощью инструментов командной строки” мы рассмотрим free и vmstat - две небольшие утилиты, которые раскрывают удивительно много информации о состоянии вашей системы Linux. free дает вам мгновенный снимок того, как используются оперативная память и подкачка. vmstat ( статистический отчет о виртуальной памяти) предоставляет отчеты в реальном времени о памяти, процессоре и активности ввода-вывода (I/O).

К концу этой статьи буферы и кэш станут для вас “пространством для маневра”, вы сможете с уверенностью читать загадочную колонку доступно (available) и выявлять утечки памяти или перегрузку ввода-вывода.

Краткий обзор free

Основы использования

1
2
3
4
$ free -h
       total    used    free   shared  buff/cache  available
Mem:    23Gi    14Gi   575Mi    3,3Gi        12Gi      8,8Gi
Swap:  8,0Gi   6,6Gi   1,4Gi

free анализирует /proc/meminfo и выводит итоги о физической памяти, подкачке (swap), а также буферах ядра и кэше. Используйте -h для человекочитаемых единиц, -s 1 для обновления каждую секунду и -c N для остановки после N выборок. Это удобно для отслеживания потребления памяти при параллельной работе. Например, free -s 60 -c 1440 дает 24-часовую запись в формате CSV без установки дополнительных демонов мониторинга.

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

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

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

Выявление проблем с free

  • Быстрое сокращение доступной памяти в сочетании с ростом используемого подкачки указывает на реальную нехватку памяти.
  • Большие скачки загрузки/выгрузки указывают на перегруженность или неконтролируемый расход памяти.

vmstat – отчет о статистике виртуальной памяти

vmstat (статистика виртуальной памяти) отображает процессы, память, подкачку, блочный ввод-вывод, прерывания, переключения контекста и использование ЦП в одной строке. Что бы проследить тенденции, запустите vmstat с интервалом ( вывод, показанный ниже, был разделен на три части для лучшей читаемости):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ vmstat 1 3
procs -----------memory----------     
 r  b   swpd   free   buff  cache     
 2  0 7102404 1392528     36 12335148 
 0  0 7102404 1392560     36 12335188 
 0  0 7102404 1373640     36 12349928 

 ---swap-- -----io---- 
  si   so    bi    bo  
   8   21   130   724  
   0    0     0     0  
   0    0     8    48  

 -system-- -------cpu-------
 in     cs us sy id wa st gu
 2851   19 15  7 77  0  0  0
 5779 7246 14 10 77  0  0  0
 5141 6525 12  9 79  0  0  0

Разберем вывод

Из справочника vmstat(8):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Procs
    r: Количество запущенных процессов (работающих или ожидающих времени выполнения).
    b: Количество процессов, заблокированных в ожидании завершения ввода-вывода.

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

Swap
    На них влияет опция --unit.
    si: Объем памяти, загружаемой с диска (в сек.).
    so: Объем памяти, выгруженной на диск (в сек.).

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

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

CPU
    Это проценты от общего времени ЦП.
    us: Время, потраченное на выполнение неядерного кода. (время пользователя, включая nice)
    sy: Время, затраченное на выполнение кода ядра. (системное время)
    id: Время, проведенное в режиме ожидания. До Linux 2.5.41 сюда входит время ожидания ввода-вывода.
    wa: Время, потраченное на ожидание ввода-вывода. До Linux 2.5.41, включено в простой.
    st: Время потреченное на виртуальной машине. До Linux 2.6.11, неизвестно.
    gu: Время, потраченное на запуск гостевого кода KVM (гостевое время, включая гостевое время).

Практическая диагностика

Раздел Ключевые поля Что смотретьРаздел Ключевые поля Что смотретьРаздел Ключевые поля Что смотреть
Процессыr (run-queue), b (blocked)r > ядер процессора = конкуренция
Памятьswpd, free, buff, cacheПодъем swpd с падением free = давление памяти
Подкачкаsi, soНенулевое значение so означает, что ядро выгружается (swapping)
Ввод/выводbi, boВысокий bo + высокий wa указывает на интенсивную запись на блочное устройство
Системаin, csВнезапные всплески могут указывать на interrupt storm
Процессорus, sy, id, wa, stВысокая wa (ожидание ввода-вывода) = узкое место в системе хранения

Обнаружение утечки памяти

Запустите vmstat 500 в одном терминале, пока приложение вызывающее подозрения работает в другом. Если free продолжает падать и si/so последовательно растет, физическая оперативная память исчерпывается. Ядро начинает выгружаться в систему подкачки (swapping), что является классическим поведением утечки.

Нахождение насыщения ввода-вывода

Когда wa (ожидание ввода-вывода) и bo (запись на блочное устройство) растут, а r остается скромным, ЦП простаивает и застрял в ожидании диска. Рассмотрите возможность добавления более быстрого хранилища или настройки параметров планировщика ввода-вывода.

Обнаружение чрезмерной загрузки процессора

Устойчивый r, который вдвое больше числа логических ядер с низким wa и большим количеством свободного пространства, означает, что узким местом является ЦП, а не память или ввод-вывод. Используйте top или htop, чтобы найти самые загруженные процессы, или масштабируйте рабочие нагрузки соответствующим образом.

Заключение

Освоение free и vmstat дает вам возможность взглянуть на использование памяти, активность подкачки, задержку ввода-вывода и загрузку ЦП. Для повседневной отладки: начните с free, чтобы проверить, действительно ли вашей системе не хватает памяти, а затем используйте vmstat, чтобы выявить причину, будь то утечки памяти, узкие места на диске или перегрузка ЦП.

Оставайтесь с нами для следующей части нашей серии “Анализ системы с помощью инструментов командной строки” и удачного устранения неполадок Fedora!