Как узнать сколько сервер использует оперативной памяти
Linux – довольно гибкая система, выполнить задачи в которой можно разными способами. Сегодня мы рассмотрим, как узнать, сколько оперативной памяти (ОЗУ — оперативное запоминающее устройство или RAM — Random Access Memory) используется определенным процессом. Сама оперативная память представляет собой специальное устройство, которое используется для временного хранения данных и обеспечивает функционирование ПО.
ОЗУ не стоит путать с ПЗУ (постоянным запоминающим устройством): их отличие заключается в том, что оперативная память является энергозависимой (при выключении компьютера все данные исчезнут), в то время как память жесткого диска сохранит все данные даже после выключения машины. Поэтому и функции, которые они выполняют, также разнятся. Процессор использует оперативную память для быстрого доступа к данным - жесткий диск такую скорость обеспечить не может, поэтому при запуске программа загружается в оперативную память.
Мы отследим занимаемую память на примере процесса веб-сервера Apache.
Примеры
Оптимизация
Следующий раздел — это сводка пользователей, которые одновременно пытаются оптимизировать запросы.
Запросы будут отправлены на сервер для компиляции. Процесс компиляции включает в себя разбор, алгебраизацию и оптимизацию. Запросы классифицируются в зависимости от количества памяти, которое будет потреблять каждый запрос во время процесса компиляции.
Эта сумма не включает память, необходимую для выполнения запроса.
Когда начинается запрос, не существует ограничений на количество запросов, которые можно компилировать. Так как потребление памяти увеличивается и достигает порогового значения, запрос должен пройти шлюз, чтобы продолжить. После каждого шлюза постепенно уменьшается ограничение одновременно компилировать запросы. Размер каждого шлюза зависит от платформы и нагрузки. Размеры шлюза выбираются для максимальной масштабируемости и пропускной способности.
Если запрос не может пройти шлюз, запрос будет ждать, пока память будет доступна. Или запрос возвращает ошибку времени (ошибка 8628). Кроме того, запрос не может получить шлюз, если пользователь отменяет запрос или обнаруживается тупик. Если запрос проходит несколько шлюзов, он не освобождает меньшие шлюзы до завершения процесса компиляции.
Такое поведение позволяет одновременно создавать только несколько компиляций с интенсивным объемом памяти. Кроме того, это поведение увеличивает пропускную способность для небольших запросов.
Наблюдение за памятью операционной системы
Для отслеживания нехватки памяти используйте приведенные ниже счетчики Windows. Значения многих счетчиков памяти операционной системы можно запрашивать с помощью динамических административных представлений sys.dm_os_process_memory и sys.dm_os_sys_memory.
Память: доступно байтов
Этот счетчик указывает на то, сколько байт памяти доступно на данный момент для использования процессами. Низкие значения счетчика Доступно байтов могут указывать на общую нехватку памяти операционной системы. Это значение можно запросить с помощью T-SQL из sys.dm_os_sys_memory.available_physical_memory_kb.
Память: ошибок страницы/с Этот счетчик показывает частоту ошибок страниц для всех процессов, включая системные. Низкий, но не нулевой уровень выгрузки на диск (и вызванные ею ошибки страниц) является нормальным, даже если у компьютера достаточно большое количество доступной памяти. Диспетчер виртуальной памяти (VMM) Microsoft Windows берет страницы из SQL Server и других процессов по мере того, как он урезает размеры рабочих множеств этих процессов. Деятельность VMM может привести к ошибкам страниц.
Процесс: ошибок страницы/с Этот счетчик показывает частоту ошибок страниц для определенного пользовательского процесса. С помощью счетчика Процесс: ошибок страниц/с можно определить, вызвана ли повышенная активность диска подкачкой, выполняемой сервером SQL Server. Чтобы определить, является ли SQL Server или другой процесс причиной излишней подкачки, наблюдайте за счетчиком Процесс: ошибок страниц/с для экземпляра процесса SQL Server.
Дополнительные сведения об устранении проблемы излишней подкачки см. в документации по операционной системе.
5.1. Установка dmidecode
Утилита dmidecode не на всех дистрибутивах Linux установлена по умолчанию , так что начнём с её установки. Установить dmidecode можно непосредственно из репозитория дистрибутива с помощью менеджера пакетов.
В дистрибутивах, основанных на Ubuntu, возможна установка пакета с помощью инструмента apt :
Для RHEL, Fedora и CentOS можно использовать yum :
Если дистрибутив основан на Arch, с этой задачей справится pacman :
Совокупная память
В следующем разделе содержится совокупная информация о памяти для каждого типа клерка и для каждого узла NUMA. В системе с поддержкой NUMA можно увидеть выход, аналогичный следующему.
В следующей таблице содержится только часть вывода.
Эти ID-узлы соответствуют конфигурации узлов NUMA на компьютере, который работает SQL Server. ID-узлы узла включают возможные узлы NUMA программного обеспечения, которые определяются поверх узлов NUMA оборудования или в верхней части системы SMP. Чтобы найти сопоставление между ID-узлами и процессорами для каждого узла, просмотреть ID события информационного события 17152. Это событие регистрируется в журнале Приложения в viewer событий при запуске SQL Server.
Для SMP-системы вы увидите только один раздел для каждого типа клерка. Этот раздел похож на следующий.
Другие сведения в этих разделах о совместной памяти:
SM Reserved. Это значение отображает ВАЗ, зарезервированный всеми клерков этого типа, которые используют API файлов с картой памяти. Этот API также известен как общая память.
SM Committed: Это значение отображает ВАЗ, который совершается всеми клерков такого рода, которые используют API файлов с картой памяти.
Вы можете получить сводную информацию для каждого типа клерка для всех узлов памяти с помощью sys. dm_os_memory_clerks динамическое представление управления (DMV). Для этого запустите следующий запрос:
Кэш процедуры
В следующем разделе описывается состав кэша процедуры.
Элементы в этом разделе следующие:
TotalProcs. Это значение показывает общее кэшировали объекты, которые в настоящее время находятся в кэше процедуры. Это значение будет соответствовать записям в sys.dm_exec_cached_plans DMV.
Из-за динамического характера этой информации совпадение может быть не точным. Вы можете использовать PerfMon для мониторинга объекта SQL Server: Планирование кэша и DMV для получения подробных сведений о типе кэшированных объектов, таких как триггеры, процедуры и объекты sys.dm_exec_cached_plans ad hoc.
TotalPages. Это значение отображает накопительные страницы, которые необходимо хранить во всех кэшных объектах в кэше процедуры.
InUsePages. Это значение отображает страницы в кэше процедуры, которые относятся к процедурам, которые в настоящее время запущены. Эти страницы не могут быть отброшены.
Распределение буфера
В следующем разделе показано распределение буферов 8 килобайт (КБ) в пуле буферов.
Элементы в этом разделе следующие:
Бесплатно. Это значение отображает совершенные буферы, которые в настоящее время не используются. Эти буферы доступны для хранения данных. Или другие компоненты могут запрашивать эти буферы, а затем пометить эти буферы как украденные.
Кэш. Это значение отображает буферы, используемые для различных кэшей.
База данных (чистая): Это значение показывает буферы, которые имеют содержимое базы данных и которые не были изменены.
База данных (грязная): Это значение показывает буферы, которые имеют контент базы данных и которые были изменены. Эти буферы содержат изменения, которые необходимо смыть на диск.
I/O. Это значение отображает буферы, ожидающих ожидающих операции I/O.
Защелка. Это значение показывает защелковые буферы. Буфер защелкается при чтении или изменении содержимого страницы. Буфер также защелкется, когда страница читается с диска или пишется на диск. Защелка используется для поддержания физической согласованности данных на странице во время чтения или изменения. Блокировка используется для поддержания логической и транзакционной согласованности.
Изоляция памяти, используемой SQL Server
Для мониторинга использования памяти сервером SQL Server используйте приведенные ниже счетчики объектов SQL Server. Значения многих счетчиков объектов SQL Server можно запрашивать с помощью динамических административных представлений sys.dm_os_performance_counters и sys.dm_os_process_memory.
По умолчанию сервер SQL Server управляет требованиями к памяти динамически исходя из доступных ресурсов системы. Если SQL Server нужно больше памяти, он производит запрос к операционной системе, чтобы определить, доступна ли свободная физическая память, и использует ее. Если в операционной системе недостаточно свободной памяти, SQL Server будет освобождать память для операционной системы до тех пор, пока нехватка памяти не будет устранена или пока SQL Server не достигнет предела min server memory. Однако можно отказаться от динамического использования памяти, задав значения для параметров конфигурации сервера min server memory и max server memory. Дополнительные сведения см. в разделе Параметры памяти сервера.
Для мониторинга объема памяти, используемого SQL Server , наблюдайте за следующими счетчиками производительности.
SQL Server: Memory Manager: общая память сервера (КБ)
Этот счетчик показывает объем памяти операционной системы, выделенной в настоящее время серверу SQL Server диспетчером памяти SQL Server. Данное значение, как правило, увеличивается при повышении активности и растет после запуска SQL Server. Получить этот счетчик можно из столбца committed_kb динамического административного представления sys.dm_os_sys_info.
SQL Server: Memory Manager: память целевого сервера (КБ)
Этот счетчик показывает идеальный объем памяти для SQL Server в соответствии с рабочей нагрузкой за последнее время. Чтобы определить, выделен ли для сервера SQL Server оптимальный объем памяти, сравните это значение со счетчиком Общая память сервера по истечении некоторого периода работы со стандартной нагрузкой. Значения счетчиков Общая память сервера и Память целевого сервера должны быть примерно равны. Если значение Общая память сервера значительно меньше, чем значение Память целевого сервера, возможно, экземпляру SQL Server не хватает памяти. Через некоторое время после запуска SQL Server значение Общая память сервера возрастает. При этом значение Память целевого сервера должно быть больше, чем Общая память сервера. Получить этот счетчик можно из столбца committed_target_kb динамического административного представления sys.dm_os_sys_info. Дополнительные сведения и рекомендации по настройке памяти см. в статье Параметры конфигурации памяти сервера.
Процесс: рабочий набор
Этот счетчик показывает объем физической памяти, используемой процессом в настоящее время, согласно данным операционной системы. Обратите внимание на экземпляр этого счетчика для sqlservr.exe. Получить этот счетчик можно из столбца physical_memory_in_use_kb динамического административного представления sys.dm_os_process_memory.
Процесс: байт исключительного пользования
Этот счетчик показывает объем памяти операционной системы, запрошенный процессом для использования в собственных целях. Обратите внимание на экземпляр этого счетчика для sqlservr.exe. Так как этот счетчик учитывает все выделения памяти, запрошенные процессом sqlservr.exe, включая выходящие за пределы max server memory, его значение может превышать значение параметра max server memory.
SQL Server: Buffer Manager: страниц базы данных
Этот счетчик указывает число страниц с содержимым базы данных в буферном пуле. Память, не относящаяся к буферному пулу процесса SQL Server, не учитывается. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.
SQL Server: Buffer Manager: коэффициент попаданий в буферный кэш
Этот счетчик относится только к SQL Server. Желательно, чтобы коэффициент был не меньше 90. Значение выше 90 указывает на то, что более 90 процентов всех запрошенных данных были получены из кэша данных в памяти без считывания с диска. Дополнительные сведения о диспетчере буферов SQL Server см. в статье SQL Server, объект Buffer Manager. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.
SQL Server: Buffer Manager: ожидаемое время существования страницы
Этот счетчик измеряет, сколько секунд самая старая страница находится в буферном пуле. Для систем с архитектурой NUMA это среднее значение для всех узлов NUMA. Чем больше это значение, тем лучше. Его резкое падение указывает на постоянное обновление данных в буферном пуле, из-за которого рабочая нагрузка недостаточно эффективно использует данные, уже находящиеся в памяти. У каждого узла NUMA имеется собственный узел буферного пула. На серверах с несколькими узлами NUMA узнать ожидаемое время существования страницы для каждого узла буферного пула можно с помощью счетчика SQL Server: узел буфера: ожидаемое время существования страницы. Запросить этот счетчик можно из динамического административного представления sys.dm_os_performance_counters.
4. Команда top
top представляет собой диспетчер задач в виде командной строки с выводом в режиме реального времени . С её помощью можно просмотреть активные процессы в виде удобной таблицы. Также она выводит данные по использованию процессора, оперативной памяти и системы в целом. Чтобы запустить такой диспетчер задач, достаточно выполнить команду top :
Вверху, рядом с полем Mem , приводятся данные по физической памяти: общий объём RAM 7833 МБ.
Общие сведения
Команда DBCC MEMORYSTATUS предоставляет снимок текущего состояния памяти SQL Server. Вы можете использовать выход из этой команды для устранения проблем потребления памяти в SQL Server или устранения определенных ошибок из памяти. (Многие ошибки из памяти автоматически печатают этот вывод в журнале ошибок.) Службы поддержки клиентов Майкрософт также могут запрашивать, чтобы вы запускали эту команду во время определенного инцидента поддержки, если у вас возникли ошибки, которые могут быть связаны с состоянием с низкой памятью.
Монитор производительности (PerfMon) и диспетчер задач не учитывают память правильно, если включена поддержка масштабов адресного окна (AWE).
В этой статье описываются некоторые данные, которые можно получить из вывода DBCC MEMORYSTATUS команды. В нескольких разделах этой статьи содержатся несвободные сведения о реализации, которые здесь не объясняются. Службы поддержки клиентов Майкрософт не будут отвечать на любые вопросы или предоставлять дополнительные сведения о значении определенных счетчиков за пределами сведений, предоставленных в этой статье.
Сводка использования памяти
В разделе Диспетчер памяти следует сводка об использовании памяти для каждого узла памяти. В системе с включенной системой доступа к единой памяти (NUMA) будет соответствующая запись узла памяти для каждого узла NUMA оборудования. В системе SMP будет одна запись узла памяти.
ID узла памяти может не соответствовать ИД аппаратного узла.
Эти значения показывают память, которая выделяется потоками, которые работают на этом узле NUMA. Эти значения не являются локальной памятью узла NUMA.
Элементы в этом разделе следующие:
VM Reserved. Это значение отображает ВАЗ, зарезервированный потоками, работающими на этом узле.
Значение VM Committed. Это значение отображает ВАЗ, который совершается потоками, работающими на этом узле.
Выделено AWE. Это значение отображает память, выделенную с помощью механизма AWE в 32-битной версии продукта. Или это значение показывает общее количество памяти, потребляемой заблокированными страницами в 64-битной версии продукта.
В системе с поддержкой NUMA это значение может быть неправильным или отрицательным. Однако общее значение AWE, выделенного в разделе Диспетчер памяти, является правильным. Для отслеживания памяти, выделяемой отдельными узлами NUMA, SQL Server: объекты производительности буферного узла. (Дополнительные сведения см. в SQL Server Books Online.)
MultiPage Allocator. Это значение отображает память, которая выделяется через многофайловой аллигатор потоками, работающими на этом узле. Эта память поступает из-за пределов буферного пула.
Allocator SinglePage. Это значение отображает память, которая выделяется через одношаговой аллигатор потоками, работающими на этом узле. Эта память украдена из пула буфера.
Суммы значений VM Reserved и значений VM Committed на всех узлах памяти будут немного меньше соответствующих значений, которые сообщаются в разделе Диспетчер памяти.
Сводка
В этой статье обсуждаются результаты DBCC MEMORYSTATUS работы команды. Эта команда часто используется для устранения неполадок Microsoft SQL Server потребления памяти.
В этой статье описываются элементы вывода для диспетчера памяти, сводка об использовании памяти, совокупные сведения о памяти, сведения о распределении буфера, сведения о буферном пуле и сведения о кэше процедуры. В нем также описываются данные об объектах глобальной памяти, об объектах памяти запросов, об оптимизации и брокерах памяти.
Определение ожидаемого времени существования страницы
В приведенном ниже запросе с помощью представления sys.dm_os_performance_counters отслеживается текущее значение ожидаемого времени существования страницы для экземпляра SQL Server на уровне как всего диспетчера буферов, так и каждого узла NUMA.
В этой статье описывается использование команды DBCC MEMORYSTATUS для мониторинга использования памяти.
Оригинальная версия продукта: SQL Server
Исходный номер КБ: 907877
7.2. KSysGuard
KSysGuard — диспетчер задач, разработанный сообществом KDE как дефолтный для свободной среды рабочего стола KDE . Аналогичным образом, если вы используете другую рабочую среду, его несложно установить в системе с помощью пакета ksysguard в соответствующем репозитории. Запустить его после установки можно командой ksysguard :
Открыв ksysguard , перейдём на вкладку System Load . Данные о памяти там представлены вместе с наглядным графиком.
★ Linux
Общая схема подбора различных утилит для анализа запущенных процессов
5. Утилита dmidecode
Утилита dmidecode в удобочитаемом формате выводит сведения об аппаратных ресурсах: спецификации, серийные номера, версии BIOS. Данные по оборудованию извлекаются из таблицы DMI . С помощью утилиты можно получить ценные сведения о системе, например, максимальный объём поддерживаемой памяти.
3. Команда vmstat
Как и команда free , vmstat (статистика виртуальной памяти) также доступна в большинстве дистрибутивов Linux. По умолчанию при выполнении команды vmstat выводятся данные о свободной памяти, памяти используемой в качестве буферов и кэша, SWAP-памяти, использовании процессора, блочных устройств и системы в целом:
Флаг -w или –wide позволяет отобразить результат в развёрнутом, удобном для чтения формате. Поскольку нас интересует общий объём оперативной памяти, добавим флаг -s или –stats :
Первая запись в результатах — общий объём памяти RAM. Если нужны не все данные, можно использовать grep для получения только требуемой записи:
Объекты памяти запроса
В следующем разделе описываются сведения о предоставлении памяти запроса. В этом разделе содержится снимок использования памяти запроса. Память запроса также называется памятью рабочего пространства.
Если размер и стоимость запроса удовлетворяют "небольшие" пороги памяти запроса, запрос ставится в небольшую очередь запросов. Это поведение предотвращает задержку меньших запросов за более крупными запросами, которые уже находятся в очереди.
Элементы в этом разделе следующие:
- Гранты. Это значение отображает запущенные запросы, которые имеют гранты памяти.
- Ожидание. Это значение отображает запросы, ожидающих получения грантов на память.
- Доступно. Это значение отображает буферы, доступные для запросов для использования в качестве рабочего пространства с hash и в качестве рабочего пространства сортировки. Доступное значение обновляется периодически.
- Максимум. Это значение отображает общие буферы, которые могут быть предоставлены всем запросам для использования в качестве рабочего пространства.
- Ограничение. В этом значении показана цель выполнения запроса для большой очереди запросов. Это значение отличается от значения Maximum (Buffers), так как значение Maximum (Buffers) не обновляется до изменения очереди.
- Следующий запрос. Это значение отображает размер запроса памяти в буферах для следующего запроса ожидания.
- Ожидание: Это значение показывает объем памяти, который должен быть доступен для выполнения запроса, на которое ссылается значение Next Request. Значение Waiting For — это значение Next Request, умноженное на коэффициент запаса. Это значение эффективно гарантирует, что при запуске следующего запроса ожидания будет доступно определенное количество памяти.
- Стоимость. Это значение показывает стоимость следующего запроса ожидания.
- Время ожидания. Это значение показывает время ожидания в секундах для следующего запроса ожидания.
- Время ожидания. Это значение показывает прошлое время в миллисекунд, так как следующий запрос ожидания был поставлен в очередь.
- Последняя цель. Это значение отображает общее ограничение памяти для выполнения запроса. Это значение является комбинированным ограничением как для большой очереди запроса, так и для небольшой очереди запросов.
Брокеры памяти
В следующих трех разделах покажут сведения о брокерах памяти, которые контролируют кэшную память, украденную и зарезервированную память. Сведения, которые предоставляют эти разделы, можно использовать только для внутренней диагностики. Поэтому эта информация здесь не описана.
Как понять, хорошо ли, как быстро и насколько правильно работает сервер? По сути, приведённые далее проверки можно осуществлять на любом сервере, компьютере либо виртуальной машине. Для начала необходимо разобраться с основными терминами, которые будут использованы.
Утилита — компьютерная программа для выполнения специализированных задач, связанных с работой оборудования и операционной системы устройства.
Можно сказать, что это небольшие программы, которые помогают производить анализ каких-либо данных, настройку или другими способами облегчать работу пользователя с системой.
Мы видим утилиты в качестве ярлыков на рабочих столах, файлов скриптов, вызываем их из командной строки или двойным щелчком. Однако внутри содержится программный код, который за нас производит все необходимые действия.
Утилиты могут входить в состав операционных систем, идти в комплекте со специализированным оборудованием или распространяться отдельно (в таком случае их нужно скачать либо установить из репозитория).
Производительность (вычислительная мощность компьютера) — это скорость выполнения определённых операций на компьютере, которую можно представить (измерить) количественной характеристикой (процентами, секундами, флопсами).
Оценка реальной вычислительной мощности производится путём прохождения специальных тестов, предназначенных для проведения некоторых операций и измерения времени их выполнения.
В нашем случае всю работу по тестированию и оценке данных (насколько это возможно) будут производить утилиты. Мы увидим лишь конечный результат. Основная задача: понять, что именно означают выводимые значения.
Для верной интерпретации полученных фактов необходимо также понимать: существует взаимосвязь между различными аппаратными компонентами, в сумме они влияют на производительность сервера (будь то Windows или Linux).
По этой причине мы будет рассматривать отдельно несколько параметров работы системы. В сумме их показатели влияют на общую производительность системы. Измерив всего один показатель, нельзя сказать, что работа происходит плохо, долго или некорректно.
Сейчас большинство серверов работают на основе операционной системы Linux, поэтому мы рассмотрим её более подробно в первую очередь. Вторую популярную в большей степени для домашнего использования систему Windows тоже не обойдём стороной.
Важно помнить, что приведённые утилиты имеют свои аналоги в обеих системах. Поэтому будут рассмотрены основные принципы работы наиболее популярных команд и программ. Дополнительные данные можно найти в открытом доступе сети Интернет. На форумах и в других источниках. Главное - понять, что искать. Приступим.
Сервер:
Объекты глобальной памяти
В следующем разделе содержатся сведения о различных объектах глобальной памяти. В этом разделе также содержатся сведения о том, сколько памяти используют объекты глобальной памяти.
Элементы в этом разделе следующие:
- Ресурс. Это значение отображает память, которую использует объект Resource. Объект Resource используется в движке хранения и для различных структур на всей сервере.
- Блокировки. Это значение отображает память, которую использует диспетчер блокировки.
- XDES. Это значение отображает память, которую использует диспетчер транзакций.
- SETLS. В этом значении показана память, используемая для выделения структуры служба хранилища для каждого потока, использующей локальное хранилище потоков.
- SE данных. Это значение отображает память, используемую для выделения структур для доступа к таблицам с помощью параметра Access Methods.
- SubpDesc Allocators. Это значение показывает память, используемую для управления подпроцессами для параллельных запросов, операций резервного копирования, операций восстановления, операций базы данных, операций с файлами, зеркального и асинхронного курсоров. Эти подпроцессы также называются параллельными процессами.
- SE SchemaManager. Это значение показывает память, которую использует диспетчер схемы для хранения служба хранилища метаданных, определенных для двигателя.
- SQLCache. Это значение отображает память, которая используется для хранения текста ad hoc statements и подготовленных заявлений.
- Репликация. Это значение отображает память, которую сервер использует для внутренних подсистем репликации.
- ServerGlobal: Это значение отображает объект глобальной памяти сервера, который используется в общих масштабах несколькими подсистемами.
- XP Global. Это значение отображает память, используемую расширенными сохраненными процедурами.
- Таблицы сортировки. Это значение отображает память, используемую в таблицах сортировки.
Сведения о пуле буфера
Подробные сведения о буферах буферных пулов для страниц баз данных можно получить с помощью sys.dm_os_buffer_descriptors DMV. Подробные сведения о страницах буферного пула, используемых для разных серверных целей, можно получить с помощью sys.dm_os_memory_clerks DMV.
В следующем разделе перечислены сведения о пуле буфера и дополнительные сведения.
Элементы в этом разделе следующие:
8. Заключение
В этой статье мы рассмотрели различные команды и инструменты, с помощью которых можно выяснить объём физической памяти системы под управлением Linux.
Мы изучили базовую команду free и её альтернативу vmstat . Затем узнали, как с помощью команды top можно получить различные системные данные. Также взглянули на утилиту dmidecode и выяснили, как извлечь данные о физической памяти из таблицы DMI.
Ознакомились с директорией /proc и научились читать файл /proc/meminfo , чтобы выяснить общий объём памяти RAM и использовать его в скрипте для оболочки Bash. И наконец, перечислили пару графических диспетчеров задач, показав, как с их помощью просмотреть объём и статистику использования оперативной памяти.
Проводите периодический мониторинг экземпляра SQL Server для подтверждения того, что память используется в допустимых пределах.
Диспетчер памяти
Первый раздел вывода — диспетчер памяти. В этом разделе показано общее потребление SQL Server.
Элементы в этом разделе следующие:
- VM Reserved. Это значение показывает общее количество виртуального адресного пространства (VAS), которое SQL Server зарезервировано.
- VM Committed: Это значение показывает общее количество ВАЗ, SQL Server было совершено. Зафиксированная ВАЗ связана с физической памятью.
- AWE Allocated: Это значение показывает общее количество памяти, выделяемой с помощью механизма AWE в 32-битной версии SQL Server. Или это значение показывает общее количество памяти, потребляемой заблокированными страницами в 64-битной версии продукта.
- Зарезервированная память. Это значение отображает память, зарезервированную для выделенного подключения администратора (DAC).
- Зарезервированная память в использовании. Это значение показывает зарезервированную память, которая используется.
Настройка максимального размера памяти для SQL Server
По умолчанию экземпляр SQL Server может со временем использовать большую часть памяти, доступной операционной системе Windows на сервере. После занятия памяти она не высвобождается, пока не будет обнаружена нехватка памяти. Такое поведение является нормальным и не свидетельствует об утечке памяти в процессе SQL Server. Чтобы ограничить объем памяти, который сервер SQL Server может использовать в своих целях, задайте параметр max server memory. Дополнительные сведения см. в статье Руководство по архитектуре управления памятью.
В SQL Server на Linux установить ограничение памяти можно с помощью средства mssql-conf и параметра memory.memorylimitmb.
Мониторинг состояния системы с разбиением по процессам
Поиск проблемных мест стоит начать с использования команды top.
Данная утилита широко используется для анализа программ в режиме реального времени. Набрав в командной строке top, мы сразу же видим динамическую выдачу процессов, которые в данный момент выполняются, спят или ожидают своей очереди. Однако сейчас нас в большей степени интересует самый верх - шапка - вывода команды. Выглядит это следующим образом:
Показатели, на которые стоит обратить внимание, помечены красным цветом, их показатели - зелёным. В данном случае значения были выделены вручную для наглядности.
Более яркий вывод может обеспечить использование htop - это аналог рассматриваемой нами системной утилиты top, но для начала разберёмся с тем, на что стоит обращать внимание в обоих случаях.
Показатели загруженности системы: load average и %CPU, us, id, wa
1. load average
Состоит из трёх чисел и демонстрирует усреднённую загрузку сервера за 1, 5 и 15 минут. Чем ниже значения, тем лучше.
Простое правило: значения не должны быть больше количества процессоров.
2. %CPU
Какие процессы сколько процессорных ресурсов потребляют:
Загрузка пользовательскими процессами. Если ваш сервер постоянно не загружен ресурсоёмкими операциями типа конвертации видео, то этот показатель не должен превышать 10-20%.
Процент времени бездействия процессора должен быть высоким, в норме - от 80.
Ожидание операций ввода/вывода, чем ниже, тем лучше (иначе процессор слишком долго ждёт ответы от диска или сети).
Существует целый набор консольных утилит для измерения и анализа производительности системы - sysstat:
- iostat - показывает статистику использования процессора и потоков ввода/вывода для дисков;
- mpstat - выводит информацию об отдельных параметрах и общей статистике по процессору;
- isag - построение графика активности системы в интерактивном режиме;
- pidstat - мониторинг отдельных задач, управление которыми осуществляется ядром Linux.
Последнюю утилиту стоит рассмотреть подробнее. Для её использования мы сможем применить информацию, полученную с помощью предыдущей программы - top.
Pidstat - это утилита, которая предназначена для сбора и вывода статистики использования ресурсов процессами.
Команда сообщает об использовании процессорного времени. Мы используем её с флагом -р (что означает, сейчас мы будет указывать PID):
PID необходимого процесса вы можете посмотреть в результатах вывода той же команды top: первый столбец сообщается process id (мы указали PID 611 и 1102).
Таким образом мы узнаём количество выделяемых ресурсов процессам с определённым идентификационным номером в системе.
После необходимо указать время в секундах, в течение которого будет осуществляться проверка (в данном случае это 10 секунд). Вы можете задавать время на своё усмотрение в зависимости от задач, которые предстоит решить.
В завершение указываем число отчётов, которые желаем видеть по итогу.
При помощи флага -d можно получить статистику ввода/ вывода (остальные показатели остались неизменными):
При помощи флага -r можно получить статистику использования оперативной памяти:
7.1. GNOME System Monitor
GNOME System Monitor входит в состав среды рабочего стола GNOME как диспетчер задач по умолчанию . А пользователи другой рабочей среды с лёгкостью могут найти пакет gnome-system-monitor в репозитории с дистрибутивом. После установки можно запустить диспетчер из командной строки:
Среди сведений на вкладке Resources найдётся и общий объём памяти.
Дополнительные сведения
Команда предназначена для диагностики служб поддержки клиентов DBCC MEMORYSTATUS Майкрософт. Формат выпуска и уровень детализации могут изменяться между пакетами служб и выпусками продуктов. Функции, которые предоставляет команда, могут быть заменены другим DBCC MEMORYSTATUS механизмом в более поздних версиях продукта. Поэтому в более поздних версиях продукта эта команда может больше не функционировать. Никаких дополнительных предупреждений не будет сделано до изменения или удаления этой команды. Поэтому приложения, которые используют эту команду, могут нарушаться без предупреждения.
Выход команды DBCC MEMORYSTATUS изменился из более ранних выпусков SQL Server. Вывод содержит несколько разделов, недоступных в предыдущих версиях продукта.
6. Виртуальный файл /proc/meminfo
Директория /proc относится к особому типу директорий, содержащих виртуальные файлы. Эти виртуальные файлы позволяют заглянуть в ядро, процессы и конфигурации Linux . Они не занимают места на диске, поскольку создаются непосредственно в момент обращения к ним. Для чтения некоторых требуются корневые привилегии.
В директории /proc есть особый файл под названием meminfo , прочесть который можно командами cat и less . Среди прочих полезностей там содержатся и данные об объёме физической памяти . Давайте заглянем в файл /proc/meminfo с помощью cat :
В примере использована команда cat — удобная утилита для чтения из файла или стандартного потока ввода. При выполнении эта команда прочтёт файл /proc/meminfo и представит обширные сведения о физической памяти . Нас интересует только общий объём оперативной памяти, который указан в первых трёх строках результата.
Мы ограничили вывод интересующими нас строками с помощью команды head . В сочетании с аргументом -n команда head задаёт количество строк результата. Размер памяти приводится в килобайтах и даёт понимание общего объёма физической памяти, а также свободного и доступного объёма.
Предположим, что мы пишем скрипт для командной оболочки Bash, и в нём фигурирует объём физической памяти RAM. Чтобы его туда добавить, можем выполнить чтение файла /proc/meminfo , а затем с помощью grep извлечь общий объём памяти.
Теперь сохраним скрипт и сделаем его исполняемым:
Определение текущего распределения памяти
Приведенные ниже запросы возвращают сведения о текущем распределении памяти.
Получение занятой памяти из /proc
Последней командой для получения занятой процессором памяти будет обращение к псевдофайловой системе /proc.
Снова будет выведен результат, который схож с уже полученным ранее – виртуальная память, используемая процессом веб-сервера Apache.
Вот мы и разобрали на примере процесса Apache способы, которыми можно посмотреть занимаемую память.
Иногда возникает необходимость проверить общий объём памяти сервера, на котором запущена ОС Linux, или же данные о памяти требуются для сценариев командной оболочки. К счастью, есть множество инструментов, которые нам в этом помогут. В этом руководстве приводятся различные команды и утилиты для определения общего объёма физической памяти.
5.2. Использование dmidecode
Как только установка завершена, выполним команду dmidecode из терминала:
Чтобы выполнить dmidecode , нам потребуются корневые привилегии . После выполнения мы получим подробные сведения об аппаратных ресурсах. Будет много данных по оборудованию, но нас интересует только общий объём памяти.
К счастью, мы можем добавить к команде опцию –type и указать интересующие нас компоненты: BIOS, память, процессор, температуру и так далее. Опция –type требует введения номера типа записи DMI.
В нашем случае это запись DMI о памяти, и получить к ней доступ можно, введя следующие значения: 5, 6, 16, 17, 18, 19, 20, 21 и 22. Из этого перечня выбираем 19, поскольку именно так обозначаются устройства оперативной памяти, подключённые к материнской плате:
Из результатов следует, что у нас только один модуль RAM размером 8 ГБ, установленный в один из слотов для оперативной памяти.
Использование оперативной памяти
Для подробного отчёта об использовании всей оперативной памяти на устройстве подойдёт:
Определение текущего объема памяти, используемого сервером SQL Server
Приведенный ниже запрос возвращает сведения о текущем использовании памяти сервером SQL Server.
2. Команда free
free — самая простая в использовании команда из подборки. С её помощью выводятся данные по использованию физической и SWAP-памяти — по умолчанию в стандартном потоке вывода. Команда free — один из самых распространённых способов быстро проверить объём оперативной памяти, поскольку она доступна в большинстве дистрибутивов Linux . Достаточно ввести её в терминале без всяких флагов:
Как видите, объём физической памяти указан в байтах. Однако, эти же данные можно вывести в удобочитаемом формате, добавив флаг -h или –human :
Как видно из полученных результатов, общий объём оперативной памяти составляет 7,6 ГБ. Есть и другие опции, с помощью которых можно привести выводимые данные в нужный формат: –kilo, –mega, –Giga и так далее. Ещё есть интересная опция -s :
Флаг -s обозначает секунды, и в этом случае команда free выведет данные об использовании оперативной памяти за каждые пять секунд. Опция особенно полезна, если отслеживать использование памяти нужно с заданным интервалом . Останавливается процесс сочетанием горячих клавиш Ctrl +C.
Команда ps
Первым вариантом будет команда ps, с помощью которой можно получить список процессов, запущенных на сервере.
- идентификатор процесса, в нашем случае это число 897110.
Получим следующий вывод:
ОЗУ будет представлено в процентном соотношении к общему количеству доступной памяти. К сожалению, в данном примере этот процент крайне мал, и столбец %MEM показывает 0,0.
Команда ps имеет свои ключи, которые вы также можете использовать для удобства:
- -A : все процессы;
- -a : процессы, связанные с конкретным терминалом, кроме главных системных процессов сеанса;
- -d : все процессы, кроме главных системных процессов сеанса;
- T : все процессы на конкретном терминале;
- a : процессы, связанные с текущим терминалом, а также процессы других пользователей;
- r : информация только о работающих процессах;
- x : процессы, отсоединённые от терминала.
7. Использование диспетчеров задач с графическим пользовательским интерфейсом
Отслеживать работу процессора, использование оперативной памяти и сетевых ресурсов, а также управлять процессами можно с помощью широкого ряда диспетчеров задач с графическим интерфейсом. Рассмотрим самые популярные варианты для Linux.
Команда top
Второй вариант – использование команды top. Более продвинутые пользователи должны знать эту команду, так как она выводит информацию о нагрузке системы и обновляет ее в реальном времени.
Обратите внимание на столбцы VIRT и %MEM. Последний столбец показывает информацию, которая очень похожа на ту, что получили предыдущей командой. А вот столбец VIRT отображает занятую виртуальную память.
Одним словом, виртуальная память – это некая комбинация ОЗУ и swap, которую использует запущенный процесс.
Обратите внимание, что команда top ограничена размерами окна, из-за чего игнорируется вся информация, которая не помещается на экран.
Читайте также: