Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1076 / 303 | Оценка: 4.30 / 3.78 | Длительность: 18:28:00
Лекция 6:

Управление пулами ресурсов. Проекты. Зоны и контейнеры

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Настройка параметров файловой системы

Чтобы оценить загрузку файловых систем, имеет смысл запустить команду

iostat -x 5

в тот момент, когда интенсивность ввода-вывода будет наиболее близка к обычному (или пиковому, в зависимости от того, как вы хотите настроить файловую системы) уровню:

...
device r/s w/s kr/s kw/s wait actv svc_t %w %b
cmdk0 17.6 2.9 138.4 53.1 1.1 0.2 60.1 3 13
fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
nfs1 0.0 0.0 0.0 0.0 0.0 0.0 9.3 0 0
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
cmdk0 307.7 0.2 766.1 2.0 0.0 0.9 2.9 0 89
fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
cmdk0 253.4 0.7 768.0 6.0 0.0 0.9 3.6 0 88
fd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
sd0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0
...

Средние значения загрузки можно получить из колонок kr/s и kw/s, в более ранних версиях системы для получения таких значений приходилось делить содержимое колонок "K/r" и "K/w" на "r/s" и "w/s" соответственно для получения средних показателей "прочитано килобайт в секунду" и "записано килобайт в секунду".

Для получения информации о распределении файлов по размеру можно использовать команду:

quot -c file_system

Например, вот каково распределение в моей тестовой системе:

quot -c /export/home
...
1128 1 165156
1136 1 166292
1160 1 167452
1176 1 168628
1184 1 169812
1192 1 171004
1224 1 172228
1232 1 173460
1240 1 174700
1264 1 175964
1360 1 177324
1376 1 178700
1440 1 180140
1488 1 181628
1536 1 183164
1608 1 184772
1648 1 186420
1704 1 188124
1768 1 189892
1792 1 191684
1832 1 193516
2047 40 437396
...

Первая колонка вывода – это размер файла в блоках, вторая – число файлов такого размера, третья – общее число блоков, занятых файлами такого размера и меньшими.

Эффективное использование памяти и свопинга

Вопрос об установке в систему дополнительной оперативной памяти представляет собой классический вопрос выбора между ценой и производительностью. Если цена важнее производительности, то при нехватке памяти увеличивают размер раздела свопинга, если важнее производительность, увеличивают объем оперативной памяти. Если же нет возможности сделать ни то, ни другое, новые процессы не смогут быть запущены при нехватке виртуальной памяти (ее можно заметить по сообщениям "Not enough space" или "WARNING: /tmp: File system full, swap space limit exceeded").

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

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

В обоих случаях высокая активность может быть временной или постоянной. В любом случае, имеет смысл уяснить ее причину.

Частота сканирования страниц

Повышенная частота сканирования страниц ( scan rate ) – главный показатель того, что в системе перестало хватать оперативной памяти. Для просмотра значения scan rate используйте команды

sar –g

или

vmstat

При анализе частоты сканирования с помощью vmstat имеет смысл запустить эту программу с параметром 60 для получения статистики каждые 60 секунд:

vmstat 60
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr cd f0 s0 -- in sy cs us sy id
0 0 0 482100 7288 23 63 126 31 46 8 54 28 0 0 0 333 1519 327 5 11 84
0 1 0 470816 2060 0 26 1 51 103 0 123 240 0 0 0 960 969 649 4 92 4
...

Первую строку (суммарную статистику) можно игнорировать. Если показатель page/sr остается выше 200 страниц в секунду в течение длительного времени, это говорит о вероятной нехватке оперативной памяти в системе.

Постоянно низкое значение частоты сканирования страниц говорит о том, что системе хватает памяти. С другой стороны, высокое значение может быть вызвано активностью процесса (или нескольких процессов одновременно), читающих данные с диска или получающих их через сеть – эти данные не только кэшируются операционной системой, но и занимают место в памяти процессов, поэтому запросто могут вызвать активный пейджинг. Такоим образом, не следует слепо полагаться на обсуждаемые рекомендации и считать 200 страниц в секунду абсолютной догмой индикации нехватки памяти: действуйте по ситуации, смотрите, какие процессы в действительности запущены и насколько они требовательны к памяти.

Активность свопинга

Если устройство, на котором находится область свопинга, загружено вводом-выводом, это говорит о нехватке памяти. Можно оценить дисковую активность с помощью программы iostat.

Для Solaris 2.6 и выше следует использовать команду

iostat -xPnce

для получения информации об активночти передачи данных в/из конкретных разделов дисков, в Solaris 2.5.1 доступна команда

iostat -xc

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

Можно также использовать

sar –d

или

vmstat

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

Использование памяти процессами

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

/usr/proc/bin/pmap –x PID

Информация о размере процесса в памяти также содержится в колонке RSS вывода программ top и ps (используйте ps –ly ).

В пакете SunPro есть отладчик dbx, который помогает находить источник утечки памяти в программе; для такой работы следует компилировать программу компилятором SunPro с ключом –g.

Статистику использования разделяемой памяти вы получите по команде

ipcs -mb

Эти программы следует использовать для определения размера процессов и основных потребителей памяти в системе.

Размер пространства свопинга

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

Для управления пространством свопинга (получения информации о нем, добавления и удаления разделов свопинга) применяется программа swap. Для получения информации о текущем состоянии пространства свопинга используйте swap –l.

Для выяснения общего объема виртуальной памяти, который включает объем оперативной памяти и пространства свопнига вместе, следует запустить swap –s или sar –r.

Если своп-раздел смонтирован в /tmp как файловая система типа tmpfs, команда

df -k /tmp

покажет общий объем свободной виртуальной памяти, включая оперативную память.

Алгоритм пейджинга

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

Параметры ядра и пейджинг
  • physmem: общее количество страниц в оперативной памяти.
  • lotsfree: сканер страниц начинает работать, когда количество свободной оперативной памяти становится меньше lotsfree. Значение по умолчанию – physmem/64, но может быть изменено в /etc/system. Сканер страниц по умолчанию запускается в режиме пейджинга. Частота сканирования ( scan rate, столбик sr в выводе vmstat ) устанавливается равной параметру slowscan, который по умолчанию равен fastscan/10.
  • minfree: пока объем свободной памяти находится между lotsfree и minfree, частота сканирования страниц растет линейно от slowscan к fastscan по мере уменьшения свободной памяти (рис. 6.2). Значение minfree по умолчанию – desfree/2, значение fastscan по умолчанию – physmem/4. Если свободной памяти становится меньше, чем desfree (что по умолчанию равно lotsfree/2 ), сканер страниц начинает запускаться 100 раз в секунду.

    Каждый свой запуск сканер страниц проверяет desscan страниц. Этот параметр изменяется динамически вместе с частотой сканирования.

  • maxpgio: этот параметр (в зависимости от конкретной аппаратуры – 40 или 60) по умолчанию ограничивает частоту ввода-вывода на устройство пейджинга. Для современных дисков с частотой вращения больше 7200 оборотов в минуту можно установить значение maxpgio в сто раз больше количества жестких дисков, задействованных в свопинге.
  • throttlefree: когда свободной оперативной памяти становится меньше throttlefree (по умолчанию этот параметр равен minfree ), запросы процессов на выделение им новых страниц памяти переводятся в состояние ожидания, до тех пор, пока не появится свободных страниц.
  • cachefree: имеет значение в для систем Solaris 7 (или систем 2.5.1 и 2.6 с установленными самыми свежими обновлениями); если в этих системах параметр priority_paging установлен равным 1 (т.е. priority paging включен), то пока свободной памяти больше, чем lotsfree, освобождаются только страницы файлового кэша в памяти, а страницы процессов не затрагиваются. Значение по умолчанию – удвоенное lotsfree. Системы Solaris более поздних версий, начиная с 8, имеют другой алгоритм освобождения оперативной памяти, и в них НЕ следует включать priority paging и устанавливать значение cachefree.
Зависимость частоты запуска сканера страниц от объема свободной памяти

Рис. 6.2. Зависимость частоты запуска сканера страниц от объема свободной памяти

В системах Solaris до версии 7 включительно сканер страниц работает так: для выбранных сканером страниц обнуляется флаг "используемости" страницы, выбор страниц происходит со скоростью, которую можно посмотреть с помощью vmstat или sar –g (scan rate). После обработки handspreadpages страниц, сканер проверяет, установлен ли флаг "используемости". Фактически, сканер состоит из двух процессов, один из которых идет по памяти и очищает флаги встреченных страниц, а второй следует за ним на некотором расстоянии и проверяет, не было ли новых обращений к этой странице (не установился ли снова этот флаг). Если флаг не установлен снова (обращений к странице за то время, пока сканер отмечал handspreadpages страниц, не произошло), то страница отправляется в своп. Параметр handspreadpages по умолчанию равен physmem/4.

В системах Solaris 8 и более новых алгоритм освобождения памяти иной (он называется cyclical page cache ). Он рассчитан на то, что при нехватке памяти выгружаются прежде всего страницы файлового кэша, и только затем – страницы процессов. Этот алгоритм разработан для тех же целей, что и priority paging в Solaris 7. Новый алгоритм использует два списка свободных страниц. Один – для помещения в него страниц файлового кэша, которые освобождаются, другой – для помещения в него прочих освобождающихся страниц (разделяемой памяти, процессов и т.п.). При таком подходе файловый кэш не соперничает ни с кем, кроме самого себя, за место в памяти.

В результате этих изменений, в системах Solaris, начиная с версии 8, vmstat сообщает иные цифры, чем в той же ситуации в более старых системах, а именно:

  • скорость возврата страниц выше;
  • весь файловый кэш показывается как свободная память;
  • скорость сканирования страниц ( scan rate ) низкая (даже близка к нулю), за исключением ситуаций, когда в системе действительно сильно не хватает памяти приложениям.

Для получения отдельного отчета по пейджингу страниц приложений ( executables ), данных ( anonymous ) и файловой системы используйте команду.

vmstat -p
Свопинг

Если системе в течение некоторого времени (обычно – 30 секунд подряд) не хватает памяти (объем свободной оперативной памяти падает ниже desfree ), то начинается свопинг процессов. Планировщик задач выгружает те процессы, которые не претендовали на процессорное время в течение более чем maxslp секунд. По умолчанию maxslp равно 20. Этот режим свопинга называется мягким.

Если дело дошло до того, что памяти меньше, чем desfree, и, кроме того, два и более процессов выстроились в очередь к процессору, а активность пейджинга превышает maxpgio, начинается жесткий свопинг. Это означает, что ядро выгружает модули и страницы кэша, а затем начинает последовательно выгружать процессы до тех пор, пока объем свободной памяти не станет больше desfree.

Не выгружаются процессы:

  • классов планирования SYS и RT ;
  • запускаемые в данный момент или остановленные по сигналу (например, при отладке);
  • завершающие работу;
  • находящиеся в состоянии зомби;
  • системные потоки;
  • процессы, которые блокируют другие, более высокоприоритетные потоки.
Ввод-вывод без кэша

Значительный объем чтения и записи данных может вызвать нехватку памяти из-за стремления системы кэшировать весь ввод-вывод. При действительно существенных объемах ввода-вывода можно отменить кэширование и производить ввод-вывод напрямую.

Для этого можно использовать функцию directio() или параметр forcedirectio при монтировании файловой системы командой mount.

Файловая система VxFS включает ввод-вывод в обход кэша всегда, когда объем операции ввода-вывода превышает значение параметра discovered_direct_iosz (см. man vxtunefs ) (по умолчанию – 256KB).

Если в вашей системе преобладают множественные операции ввода-вывода небольших объемов данных и даже VxFS не помогает освободить память от большого количества кэшируемых данных, попробуйте уменьшить до приемлемого размера значение discovered_direct_iosz.

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.