В продолжение одной из статей, хочется поделиться еще одной программой (скрипт будет указан в конце статьи), которая была написана на первом курсе и позволяла отслеживать потребление памяти компьютера, выгружать данные в отчет и уведомлять по email о преодолении порогового значения.
1. Создание системы мониторинга использования
оперативной памяти
1.1. Постановка задачи
В данной работе необходимо разработать систему мониторинга оперативной памяти в операционной системе Windows. Для разработки этой системы будет использован Системный монитор.
Требуется определить, какие счетчики в Системном мониторе помогут в мониторинге оперативной памяти. Обосновать их выбор, а также создать из них набор сборщиков данных. Необходимо выводить в отдельный файл получаемые сведения об ОЗУ. Еще одной задачей в создании системы наблюдения является настройка оповещений о пересечении определенного порогового значения и отправки сообщения с предупреждением на почту.
Данная система мониторинга является актуальной, так как поспособствует в решении проблем, связанных с «подвисаниями» системы, не возможности запуска или установки приложений и так далее. Очень часто в озвученных проблемах виновата нехватка оперативной памяти, и данная система позволит определить в отдельно взятых случаях так ли это.
1.2. Обоснование средств разработки
Системный монитор — это основное средство для отслеживания производительности системы и определения узких мест.
Существует множество различных счетчиков, определяющих узкие места связанных с оперативной памятью. В системном мониторе есть описание каждого из счетчиков, который необходимо добавить. В данном проекте будут использованы следующие счетчики:
- Память, байт выделенной виртуальной памяти.
Байт выделенной виртуальной памяти – это объем виртуальной памяти, которая была выделена – в отличие от просто зарезервированной памяти, то есть он просто показывает меру спроса на виртуальную память. Он предоставляет информацию о том, сколько байтов было выделено процессам и для какого объема памяти операционная система выделила рамку страницы ОЗУ или раздел страницы в файле подкачки (или и то, и другое). Выделенная память должна получить место на запоминающем устройстве (т.е. на диске), либо должна не нуждаться в дисковой памяти, поскольку ОЗУ достаточно велика для того, чтобы разместить в ней выделенную память. Если значение Байт выделенной виртуальной памяти превышает объем доступной оперативной памяти, подкачка используется более интенсивно, а размер файла подкачки также увеличивается. В определенный момент использование файла подкачки начинает сильно влиять на производительность компьютера и тормозить всю систему. Также этот счетчик отражает текущее значение, и не является средним значением по некоторому интервалу времени.
- Файл подкачки, используется %pagefile.
Файлы подкачки хранят страницы памяти, используемые данным процессом, но не хранящиеся в каких-либо других файлах. Файлы подкачки совместно используются всеми процессами, и захват памяти в файлах подкачки может привести к неспособности других процессов выделить нужную память. Если файл подкачки не существует, этот счетчик отражает текущий объем виртуальной памяти, который используется процессом в оперативной памяти. Этот счетчик представляет меру фактического использования файла подкачки. С его помощью можно определить, соответствует ли размер файла подкачки требованиям. Если значение счетчика достигает 100, файл подкачки заполнен, и система перестанет работать. Если используется большая часть файла подкачки, размещение нескольких файлов подкачки на разных физических дисках может повысить производительность.
- Память, обмен страниц/с.
Обмен страниц/сек - это число страниц, записанных на диск или прочитанных с диска. Эта величина является суммой величин двух других счетчиков Вывод страниц/сек и Ввод страниц/сек, а также включает подкачку (страничный обмен) системной кэш-памяти для доступа к файлам данных для приложений. Кроме того, сюда включается подкачка (страничный обмен) для не кэшированных файлов, непосредственно отображаемых в память. Этот счетчик очень часто неправильно интерпретируют. Большое его значение необязательно подразумевает, что узкие места производительности возникают из-за недостатка оперативной памяти. Операционная система не использует подкачку для записи страниц из-за слишком большого объема выделенной памяти.
- Память, вывод страниц/с.
Вывод страниц/сек - это счетчик записи страниц на диск, выполняемой для освобождения места в оперативной памяти. Этот счетчик отображает число страниц, и удобен для сравнения с другими счетчиками страниц без дополнительных преобразований. Он показывает, сколько страниц виртуальной памяти записывались в файл подкачки для освобождения страниц оперативной памяти для других целей каждую секунду. Этот счетчик необходимо отслеживать, если существует подозрение, что узкое место — это подкачка. Даже если значение счетчика Байт выделенной виртуальной памяти больше объема ОЗУ, проблем с производительностью из-за недостатка оперативной памяти не будет, если значение счетчика "Вывод страниц/с" небольшое или равно нулю в течение большей части времени. Высокая доля вывода страниц может свидетельствовать о нехватке оперативной памяти. Страницы записываются на диск только в том случае, если они были изменены в оперативной памяти. Windows записывает большее число страниц на диск для освобождения памяти, если на компьютере возникает нехватка оперативной памяти, поэтому они содержат данные, а не программный код.
- Память, доступно МБ.
Доступно МБ — это объем физической памяти в МБ, немедленно доступной для выделения процессу или для использования системой. Эта величина равна сумме памяти, выделенной для кэша, свободной памяти и обнуленных страниц памяти. Этот счетчик представляет меру того, сколько оперативной памяти доступно для удовлетворения спроса на виртуальную память (новые запросы выделения или восстановления страницы из файла подкачки). Если ОЗУ недостаточно (например, значение счетчика "Байт выделенной виртуальной памяти" больше объема ОЗУ), ОС попытается сохранить определенную часть оперативной памяти доступной для непосредственного применения, копируя страницы виртуальной памяти, которые не используются активно, в файл подкачки. Поэтому этот счетчик не достигнет нуля, что необязательно является признаком недостатка оперативной памяти в системе.
- Память, % использования выделенной памяти.
Этот счетчик показывает процентное отношение объема выделенной памяти к пределу выделенной памяти. Эта величина отражает реально используемый объем доступной виртуальной памяти. Предел выделенной памяти может быть изменен, если файл подкачки (страничный файл) будет увеличен. Эта величина представляет собой конкретное текущее значение, и не является средним значением по некоторому интервалу времени.
- Память, ошибки кэш-памяти/сек
Этот счетчик показывает частоту возникновения ошибок при поиске страницы в кэше файловой системы. Они происходят в том случае, если диспетчер кэш-памяти не находит страницу файла в непосредственной кэш-памяти и должен запросить у диспетчера памяти местонахождение страницы в другом месте оперативной памяти, для того, чтобы можно было загрузить эту страницу в непосредственную кэш-память. Также это может быть программная ошибка, если страница обнаружена в памяти, или аппаратная ошибка, если страница находится на диске.
Все эти счетчики будут использованы для мониторинга оперативной памяти. Для лучшего использования будет создана группа сборщиков данных.
Группы сборщиков данных собирают информацию, полученную от счетчиков производительности, и записывают ее в файлы журналов для последующего анализа. Файлы журнала предоставляют сведения для устранения неполадок и планирования. В отличие от диаграмм, предупреждений и отчетов, которые предоставляют сведения о текущей активности, файлы журнала позволяют отслеживать состояние счетчиков за длительное время. Таким образом, они позволяют более тщательно контролировать и изучать сведения о производительности системы.
Можно использовать несколько способов запись данных в файл. В данном проекте будет показано два основных формата журнала:
- Двоичный – тип файла будет Файл системного монитора. Он запускается в самом системном мониторе, что позволяет рассмотреть диаграмму.
- Разделение запятыми – тип файла будет Файл Microsoft Office Excel, содержащий значения, разделенные запятыми. Он запускаться в Excel, что позволяет в табличном виде оценить полученные данные. Одним из недостатков данного типа является необходимое форматирование, иначе осознать какие сведения производительности были получены, оказывается затруднительным.
Для настройки оповещений, необходимо создать новую группу сборщиков данных. В новый список оптимально включить всего три счетчика, для каждого из которых выставляется пороговое значение, так как они ведут себя наиболее стабильно:
- Память, % использования выделенной памяти.
- Память, доступно МБ.
- Память, байт выделенной виртуальной памяти
Если счетчик Память, % использования выделенной памяти приближен к 70% уже следует выслать предупреждение, более 90% — критическое. Это явный признак того, что в системе недостаточно памяти, и при таких повышенных значениях достаточно увеличить объем памяти. Следовательно, пороговым значением лучше считать 70 %.
Значение счетчика Память, Доступно МБ показывает объем физической памяти, доступный для выделения, то есть это количество физической памяти, которое доступно для использования приложениям и процессам. Если памяти недостаточно, файл подкачки будет использоваться более интенсивно, а число ошибок страниц в секунду увеличится. Производительность системы в целом может быть значительно снижена, что приведет к снижению производительности операционной системы и приложений. Пороговым значением этого счетчика можно считать 4 Гб или 4000 Мб.
Счетчик Память, байт выделенной виртуальной памяти показывает Общий размер выделенной виртуальной памяти, которую в данный момент занимают все пользовательские процессы. Пороговое значение выставляется в зависимости от оперативной памяти компьютера. Если значения этого счетчика превышают ОЗУ, данные начинают записываться на диск. А если Оперативной памяти достаточно, то в ней и размещается выделенная память. В данном случае объем оперативной памяти 8 Гб, а значит пороговым значением будет 7,5 Гб или же около 8 000 000 000 байт, так как счетчик считает в байтах.
Далее необходимо указать задачу, которая будет выполняться при прохождении порога, и некоторые аргументы, которые будут указаны в письме (рисунок 1).
Для этого нужно воспользоваться программой Планировщик заданий. В нем указывается запуск программы PowerShell, а также указываться путь к файлу со скриптом отправки сообщения на почту. В данном случае осуществляется отправка сообщения с почты mail.ru на почту rambler.ru.
1.3. Описание работы системы
В Системном Мониторе выбирается один из требующихся сборщиков данных (рисунок 2), затем он запускается.
Когда в Системном Мониторе включают первый сборщик данных, в течении минуты счетчики записывают информацию в файл. Сбор данных происходит каждые 5 секунд. На рисунке 3 представлен файл с двоичным форматом журнала, также все счетчики были с помощью ручного указания автоматически отмасштабированы.
На рисунке 4 представлен отформатированный Excel файл с другими данными этих же счетчиков. Формат журнала в данном файле разделением запятыми. Так как при полном форматировании таблицы Excel растягивается, файл был отформатирован лишь на половину.
Если включить второй сборщик данных, то при достижении порогового значения для трех выбранных счетчиков, будет отправляться запрос с задачей в Планировщик заданий. На рисунке 5 представлено окно планировщика заданий с задачей Alert, с указанным действием этой задачи, а также время прошлого запуска, и результат последнего запуска.
Вызывается задача Alert, в которой прописано вызывать PowerShell и использовать скрипт, находящийся в файле AAlert.ps1. Чтобы проверить работоспособность системы и получить все возможные оповещения на почту, специально опустим порог всех трех счетчиков. А так как каждые 5 секунд в течение минуты отправляются данные, изменим время на взятия данных на 20 секунд, тогда мы получим всего по три сообщения от каждого счетчика производительности. На рисунке 6 приведены пороги счетчиков, а также их время срабатывания. На рисунке 7 показан текст сообщения. Рисунок 8 доказывает, что все 9 сообщений были получены от счетчиков производительности.
Заключение
Таким образом возможность мониторинга оперативной памяти в операционной системе Windows сильно расширяется с помощью стандартных приложений Windows. Особенно это полезно для мониторинга оперативной памяти серверов, так как зачастую они находятся удаленно, обрабатывают и хранят большое количество информации, а создание системы мониторинга без дополнительных приложений с возможностью оповещения и просмотра ресурсов производительности облегчает и ускоряет работу администраторов серверов.
Для обычного пользователя персонального компьютера данная система также превосходно подойдет, так как информация от обычных сборщиков данных, которые записывают данные счетчиков производительности в файл, будет полезной и поможет выявить узкие места в оперативной памяти. Данная система позволит при запущенных приложениях собирать данные и сохранять их, для последующего анализа и поиска проблемных мест и ошибок.
Скрипт для отправки сообщения на почту
$counter = $Args[0]
$dtandtime = $Args[1]
$ctr_value = $Args[2]
$threshold = $Args[3]
$value = $Args[4]
$FileName="$env:ComputerName"
$EmailFrom = "emailfrom@mail.ru"
$EmailTo = "emailto@rambler.ru"
$Subject ="Alert From $FileName"
$Body = "Data and Time of Alert: $dtandtime`nPerfmon Counter: $ctr_value`nThreshold Value: $threshold `nCurrent Value: $value"
$SMTPServer = "smtp.mail.ru"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("emailfrom@mail.ru", "yourpassword");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
P.S. Не забывайте ставить лайки, подписываться на наш дзен и читать другие статьи!
Ссылки на наши ресурсы – ниже: