Эта статья является копией моей статьи из локальной WIKI организации. Статья была написана при разборе и анализе проблем потребления swap-раздела системой на сервере. В большей степени, данная статья, является компиляцией из различных источников методов и определений, хотя и писана своими словами.
SWAP=512byte⋅8405360blocks=4303544320byte;
SWAP=4Gb;
Общее определение SWAP
SWAP - определяет один из механизмов виртуальной памяти, позволяющей осуществлять перемещение неактивных фрагментов RAM, называемых страницами памяти, на внешний носитель, обычно жёсткий диск, для освобождения RAM под исполняемые участки кода. Когда код страницы памяти размещенный на SWAP будет востребован разместившей его в RAM программой, то произойдет обратное перемещение его с внешнего носителя в свободную область RAM. Такой процесс, обычно, называют свопингом.
По своей природе SWAP может являться как файлом (swap-file), так и быть RAW разделом внешнего носителя (swap-partition).
Мониторинг Swap ресурса
Для управления swap-областью используется команда Solaris /usr/sbin/swap, которая производит необходимые действия в зависимости от заданных ключей.
Идентификация системной области swap
Для идентификации подключенного swap в системе и его использовании применяем ключ -l:
Как же читать данный вывод? Прежде всего стоит запомнить, что:
Таким образом, мы видим, что у нас задействован RAW swap-раздел на RAID (d1).
Этот раздел занимает:
Этот раздел занимает:
Колонка free показывается оставшееся число блоков в SWAP. Если SWAP не используется, то blocks = free. При значениях SWAP<50% , считается, что происходит утечка swap-области виртуальной памяти и необходим анализ ситуации.
Анализ использования swap области
Для осуществления мониторинга за SWAP областью, то есть за распределением этой виртуальной памяти, используется ключ -s:
Поля данного вывода можно свести к следующей таблице:
Ключ | Описание |
---|---|
bytes allocated | Общий размер SWAP области в 1024-byte блоках выделенных для сохранения. |
reserved | Общий размер области в 1024-byte блоках не выделенный, но зарезервированный для использования (анонимная память) в дальнейшем. |
used | Общий размер используемой SWAP области в 1024-byte блоках с учетом выделенной и анонимной памяти. |
available | Общий размер SWAP области в 1024-byte блоках, который может быть сейчас назначен или зарезервирован для использования в дальнейшем. |
Следует помнить, что сумма used + available вывода swap -s будет больше перевода в Kb страниц из swap -l, объясняется это тем фактом, что вывод swap -l не учитывает расчет физической памяти участвующей в образовании SWAP области. То есть, следует помнить, что часть физической памяти (RAM) всегда используется ядром OS Solaris для SWAP.
Анализ активности SWAP области
Самым простым случаем для анализа активности использования SWAP области является просмотр вывода команды:
Данный вывод показывает нам наглядное использование SWAP, осуществляя запросы каждые 3 секунды. Нас, в первую очередь, будет интересовать вывод si (swap-ins) и so (swap-outs) полей. Значения вывода в этих полях отличные от 0 говорят о активном swap-процессе, что может являться как результатом нехватки физической памяти для системы в целом (то есть необходимо наращивание RAM), так и результатом утечки памяти в каком-либо процессе.
В анализе вывода данной команды следует обратить так же на значения поля sr (scan rate) показывающее число отсканированных в памяти страниц в секунду. Если в течении продолжительного периода времени там не нулевые значения, значит нам не хватает физической RAM. Если же мы увидим непрерывные значения этого поля вывода порядка 200 страниц/секунду, то у нас однозначно системе не хватает памяти для нормального функционирования и дальнейший анализ, без наращивания RAM, практически уже бессмыслен.
Сколько физической памяти в системе
Несмотря на то, что этот вопрос не совсем об SWAP, тем не менее необходимо знать количество выделенной физической памяти на конкретной аппаратной платформе для общего анализа. Выполнить это в ОС Solaris представляется простой командой:
Как оценить общее распределение RAM
Для того, чтобы точно понять как системой используется физическая память в OS Solaris, необходимо выполнить следующий запрос с использованием отладчика:
Как оценить процент неиспользованного SWAP
Для быстрой оценки, сколько у нас осталось SWAP области можно использовать
Просмотреть ресурсы потребляющие память
Вывести ТОР ресурсоёмких приложений
Аналогично:
Здесь нас интересует кто съедает основную память, пожиратели RAM. Однако из-за использования sharing memory вывод не дает 100% объективной картины, в особенности он не показывает, кто активно использует SWAP.
Как быстро посмотреть, кто сейчас активно использует SWAP
Для определения, кто в данный момент сбрасывает страницы на SWAP можно построить запрос по-другому:
В данном случае сортируем по размеру RSS (Resident segment size). Хвостовик нам нужен для определения у кого RSS равен 0, что является показателем проходящего swaping. Однако, из этого утверждения надо исключить такие процессы как: sched (zsched), pageout, fsflush у которых RSS всегда 0.
Как подсчитать, сколько процесс занял места в swap
Что бы проанализировать сколько памяти занимает процесс:
В выводе надо будет обратить внимание на то, что первое число - это количество памяти в Kb занимаемое процессом, а второе - собственно указывает на количество использованного swap (в выводе эти подписи отсутствуют, так как интересующая нас информационная часть - это последняя строка).
Как найти процессы, наиболее сильно выгруженные в swap
Задача немного расширяет предыдущую. Предположим, мы провели все перечисленные выше операции для анализа SWAP раздела виртуальной памяти, но нас смущает, что swap используется, например, больше чем на половину и активного свопинга нет. Как же найти, что за процесс/процессы наиболее сильно выгружены в swap?
Здесь опять на помощь к нам приходит команда pmap -S. Делаем выгрузку адресных пространств всех процессов в системе:
Далее производим анализ при помощи следующей командной строки:
Получаем вывод типа:
который и анализируем.
Как посмотреть, что за процессы используют SWAP в данный момент
Командная строка, с помощью которой можно подсмотреть какие процессы используют SWAP в данный момент времени.
Эта шайтан-строка была найдена тут.
Факты
Считается, что swap и tmpfs это одно и тоже
Действительно, это так. Такая конструкция имеет ряд преимуществ, хотя для управления tmpfs имеется свой механизм. Следует помнить, что в контексте tmpfs понятие swap рассматривается как область состоящая из объединения физической памяти и физической дисковой области (swap). Так как tmpfs использует выгружаемую память ядра ОС Solaris, то при необходимости эта часть может быть выгружена в SWAP. На практике это можно наблюдать при размещении на tmpfs данных занимающих по объему места больше, чем есть физической памяти на аппаратной платформе.
Использование swap плохо сказывается на производительности
И опять, данное утверждение, является истиной. Все дело в разнице скорости обмена данными в области RAM и скорости современных дисковых накопителей.
Здесь следует различать один нюанс. Если SWAP используют неактивные процессы системы, то это нормальное явление, практически ни как не сказывающееся на производительности системы в целом. Однако картина резко меняется, если SWAP начинает использовать активный процесс, заставляющий перемещаться страницы памяти с RAM области на дисковую область и наоборот. Мониторинг командой vmstat -S 3, показывает, в такой ситуации, исчерпание значения поля вывода free, которое отвечает за свободную физическую память в Solaris версии 8 и выше. Как только значение этого поля станет достаточно малым начнется процесс сканирования страниц памяти, это будет видно по полю sr данной команды. Любое не нулевое число в колонке sr в течении продолжительного периода времени, показывает на необходимость увеличения количества физической памяти (RAM).
Мифы
Swap всегда должен быть равен 2xRAM
Истоки этого мифа лежат в основах организации виртуальной памяти SunOS 4.X (4.3BSD with System V IPC) 1988 года, которая только с ветки SunOS 4.1.1 стала именоваться Solaris 1.0.
Сейчас виртуальная память в Solaris складывается из суммы объемов физической памяти системы (RAM) и файла подкачки на дисковой системе (swap). Концепция организации виртуальной памяти в Solaris не требует организации swap-раздела вообще. Однако, если полностью отказаться от swap-раздела, то в случае исчерпания RAM в системе не возможно будет запустить новые процессы. Поэтому существуют различные рекомендации по организации swap в документации к ОС Solaris в зависимости от целевого использования системы, но общее правило - swap должен быть около 30% от RAM.
Swap требует только RAW-раздел диска
Это не совсем так. Можно сделать swap-файл на UFS файловой системе, который легко подключить к общему swap-пулу системы, без необходимости перезагрузки ОС Solaris. Подключенный swap-файл сразу же будет задействован виртуальной памятью.
На UFS системе можно создавать любое число swap-файлов, любого размера, ограниченного только свободным пространством.
Имеются некоторые разногласия в плане какой тип SWAP области (swap-раздел или swap-файл) обеспечивают наибольшую производительность системы. Оба сценария имеют преимущество, однако, в для организации swap-раздела имеются следующие причины:
- Раздел swap занимает непрерывное пространство и может располагаться в области цилиндров диска, где скорость I/O обмена будет наивысшей, с точки зрения производительности.
- Файл swap работает через файловую систему по мере поступления обновлений, в то время как swap-раздел записывает данные на низком уровне доступа, минуя взаимодействия с файловой системой. Это делает swap-раздел немного быстрее, чем swap-файл.
Sun (позиция от Oracle не известна, но думаю такая же) рекомендовал использовать swap-файлы только как временное решение до тех пор пока не появится возможность добавить swap-разделы в систему.
Нельзя контролировать swap в Solaris containers (zones)
Отчасти правда до версии Solaris 10 08/07, в которой обновили управление ресурсами и сделали возможным управлять swap пространством. Это было сделано для устранения отказа в обслуживании вызываемым утечкой памяти.
- zone.max-locked-memory
- zone.max-msg-ids
- zone.max-sem-ids
- zone.max-shm-ids
- zone.max-shm-memory
- project.max-locked-memory - Replaces project.max-device-locked-memory
- zone.max-swap - Provides swap capping for zones through the capped-memory resource
Swap раздел используется для дампа системы
С момента появления в ОС Solaris 8 команды dumpadm, дамп системы можно сохранять на файловую систему.
Dump device - которое обычно представлено как swap является временным хранилищем дампа. Если у нас Dump device не является SWAP областью, то запускается процесс savecore в фоне, который ускоряет загрузку ОС Solaris.
Dump device - которое обычно представлено как swap является временным хранилищем дампа. Если у нас Dump device не является SWAP областью, то запускается процесс savecore в фоне, который ускоряет загрузку ОС Solaris.
Комментариев нет:
Отправить комментарий