Мар 282011
 

При анализе вывода утилиты vmstat в Solaris и HP-UX стоит обратить внимание на колонку sr (Scan Rate). Большие значения в этой колонке в течение продолжительного времени - признак того, что у системы начинаются проблемы с памятью. Такое бывает из-за неправильной конфигурации, утечек в приложениях, etc.

Что такое Scan Rate?


Во многих UNIX-системах при управлении виртуальной памятью используется так называемый "алгоритм двухстрелочных часов" (Two-Handed Clock Algorithm). В ядре ОС есть специальный процесс, именуемый "Page Scanner", задача которого - определять, какие из страниц нужно выгрузить в swap, а какие оставить.
Алгоритм двухстрелочных часов имеет наглядный геометрический смысл: представим всю виртуальную память в виде кольцевого буфера и мысленно разместим этот буфер вокруг циферблата часов (см. рисунок). Эти часы не простые - обе их стрелки движутся с одинаковой скоростью, т.е. между ними сохраняется постоянный угол.

У каждой страницы есть два бита-признака: referenced bit (ставится, если какой-то процесс обращался к странице) и modified bit (ставится, если кто-то менял содержимое страницы). Первая стрелка (чёрная) обнуляет оба бита. Через некоторое время к нашей странице подходит вторая стрелка (синяя). Если за то время, пока синяя стрелка двигалась, к странице никто не обращался и никто её не изменял, то после прохода синей стрелки страница будет выгружена в swap.
По мере исчерпания памяти, Page Scanner всё чаще и чаще проходит по списку страниц (т.е. увеличивается скорость движения стрелок наших часов).

Колонка sr (scan rate) в выводе vmstat - это количество страниц, которые Page Scanner успел проанализировать с момента последнего сбора статистики. На нормально работающей системе большую часть времени он равен нулю. Чем больше значение scan rate, тем активнее работает Page Scanner, а это означает, что свободной оперативной памяти осталось мало и используется медленная дисковая память.
Таким образом, scan rate может использоваться как один из показателей "здоровья" системы.

Посмотрим пример вывода:

 
bash-2.05$ vmstat 5 5
 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr m1 m2 m1 m1   in   sy   cs us sy id
 0 0 0 7620496 467360 198 361 860 8 8 0  0  0  0  1  1  372  262  151 15  6 79
 0 0 0 7592656 420728 102 256 295 2 0 0  0  0  0  0  0  966 1315  225 26  2 72
 0 0 0 7592776 421544 106 257 375 0 0 0  0  0  0  5  3  933 1263  210 26  2 72

Первую строчку не смотрим - там отображается кумулятивная статистика. В столбце sr (выделен красным) нули - память в порядке.

P.S. Если картинка не отображается, то ваш браузер не поддерживает формат SVG.

  2 комментария to “Scan rate в Solaris и HP-UX”

  1. есть ли способ выдернуть значение переменной из таблицы выводимой vmstat в частности волнует значение столбце sr?

    • Конечно, есть.
      Я делаю так для удобочитаемости:

      vmstat 5 | awk '{if (NR > 1 && NR != 3) print $8 " " $9 " " $12}'
      

      Такая команда оставит только колонки pi, po, sr, уберёт кумулятивную статистику и пустую строку в начале.
      Можно это оформить как отдельный скрипт.
      Вообще, AWK - редкой силы инструмент, иногда незаслуженно забываемый администраторами.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)