Вы здесь

Поиск бутылочного горлышка Windows


Доброго времени суток!

Хороший день, ничего не предвещало плохого. Но вот пришла проблема - скорость работы какого-то приложения стала неприемлемо маленькой, причём ещё неделю/месяц/день назад всё было хорошо. Решить её надо быстро, потратив как можно меньше времени. Проблемный сервер на базе Windows Server 2003 или более поздней версии.

Надеюсь нижеследующая писанина будет достаточно краткой и понятной и к тому же полезной как для начинающих администраторов, так и для более серьёзных товарищей, ибо всегда можно найти что-то новое для себя. Не стоит сразу бросаться исследовать поведение приложения. Перво наперво стоит посмотреть, хватает ли производительности сервера на данный момент? Нет ли каких-нибудь «бутылочных горлышек», ограничивающих его производительность?

В этом нам поможет perfmon – достаточно мощный инструмент, идущий вместе с Windows. Начнём с того, что дадим определение «бутылочному горлышку» - это ресурс, который достиг своего предела по использованию. Обычно они возникают из-за некорректного планирования ресурсов, аппартных проблем или неправильного поведения приложения.

Если открыть perfmon, то мы увидим десятки и сотни всевозможных датчиков, и количество оных не способствует быстрому расследованию данной проблемы. Так что для начала выделим 5 основных возможных «бутылочных горлышек», чтобы сократить список исследуемых датчиков.

Это будут процессор, оперативная память, система хранения данных (HDD/SSD), сеть и процессы. Далее мы рассмотрим каждый из этих пунктов, какие датчики будут нам нужны и пороговые значения для них.

Процессор

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

Processor\% Processor Time

Измеряет отношение времени работы процессора ко времени простоя в процентах. Самый понятный датчик, загрузка процессора. MS рекомендует менять процессор на более быстрый, если значение выше 85%. Но это зависит от многих факторов, надо знать свои потребности и особенности, т. к. данное значение может варьироваться.

Processor\% User Time

Показывает, сколько времени процессор проводит в user space. Если значение большое, то это означает, что приложения отнимают много процессорного времени, стоит взглянуть на них, т. к. назревает необходимость их оптимизации.

Processor\% Interrupt Time

Измеряет время, которое процессор затрачивает на ожидание ответа на прерывание. Данный датчик может показать наличие «железных» проблем. MS рекомендует начинать волноваться, если данное значение превышает 15%. Это означает, что какое-то устройство начинает отвечать очень медленно на запросы и его следует проверить.

System\Processor Queue Length

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

Оперативная память

Нехватка оперативной памяти может сильно сказаться на общей производительности системы, заставляя систему активно использовать медленный HDD для своппирования. Но даже если вроде бы на сервере установлено много ОЗУ, память может «утекать». Утечка памяти — это неконтролируемый процесс уменьшения количества свободной памяти, связанный с ошибками в программах. Также стоит упомянуть, что для Windows объём виртуальной памяти есть сумма ОЗУ и файла подкачки.

Memory\% Committed Bytes in Use

Показывает использование виртуальной памяти. Если значение перевалило за 80%, то стоит подумать о добавлении ОЗУ.

Memory\Available Mbytes

Показывает использование ОЗУ, а именно количество доступных мегабайт. Если значение составляет менее 5%, то опять таки следует подумать о добавлении ОЗУ.

Memory\Free System Page Table Entries

Количество свободных элементов таблицы страниц. А оно ограничено, вдобавок в наши дни популярность обретают страницы в 2 и более МБ, вместо классических 4кБ, что не способствует их большому количеству. Значение менее 5000 может свидетельствовать об утечке памяти.

Memory\Pool Non-Paged Bytes

Размер данного пула. Это кусочек памяти ядра, который содержит важные данные и не может быть выгружен в swap. Если значение превысило 175 МБ, то, скорее всего, это утечка памяти. Обычно это сопровождается появлением событий 2019 в системном журнале.

Memory\Pool Paged Bytes

Аналогично предыдущему, но данную область можно выгружать на диск (swap), если они не используются. Для данного счётчика значения выше 250 МБ считаются критичными, обычно сопровождается появлением событий 2020 в системном журнале. Также говорит об утечке памяти.

Memory\Pages per Second

Количество обращений (запись/чтение) к page file в секунду по причине отсутствия необходимых данных в ОЗУ. И опять значение более 1000 намекает на утечку памяти.

Жёсткий диск

Достаточно важный элемент, который может внести существенную лепту в производительность системы.

LogicalDisk\% Free Space

Процент свободного места. Интересуют только разделы, содержащие системные файлы — ОС, файл/файлы подкачки и т.д. MS рекомендует позаботиться об увеличении дискового пространства, если свободного места осталось менее 15%, т. к. при критических нагрузках оно может резко закончиться (temp файлами, обновлениями Windows или тем же файлом подкачки). Но, как говориться, “it depends” и надо смотреть на реально доступный размер пространства, т.к. тот же файл подкачки может быть жёстко фиксирован , на temp'ы наложены квоты, запрещающие им разрастаться, а обновления раздаются порционно и редко, либо их нет вообще.

PhysicalDisk\% Idle Time

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

PhysicalDisk\Avg. Disk Sec/Read

Среднее время, необходимое жёсткому диску для чтения данных с самого себя. Выше 25мс — это уже плохо, для SQL сервера и Exchange рекомендуется 10мс и меньше. Рекомендация идентична предыдущей.

PhysicalDisk\Avg. Disk Sec/Write

Идентично PhysicalDisk\Avg. Disk Sec/Read, только для записи. Критический порог тоже равен 25мс.

PhysicalDisk\Avg. Disk Queue Length

Показывает среднее число I/O операций, ожидающих, когда жёсткий диск станет для них доступным. Рекомендуется начинать беспокоится, если данное число вдвое превышает кол-во шпинделей в системе (в случае отсутствия raid-массивов количество шпинделей равно количеству жёстких дисков). Совет прежний — более производительный HDD.

Memory\Cache Bytes

Объём памяти, используемый для кеша, часть которого является файловым. Объём более 300МБ может говорить о проблеме с производительностью HDD или о наличии приложения, активно использующего кеш.

Сеть

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

Network Interface\Bytes Total/Sec

Кол-во данных, передаваемых (send/receive) через сетевой адаптер. Значение, превосходящее 70% от пропускной способности интерфейса, говорит о возможной проблеме. Нужно либо заменить карту на более производительную, либо добавить ещё одну для разгрузки первой.

Network Interface\Output Queue Length

Показывает число пакетов, стоящих в очереди на отправку. Если значение перевалило за 2, то стоит подумать о замене карты на более производительную.

Процессы

Производительность сервера может катастрофически упасть, если имеется неоптимизированное приложение или приложение начинает вести себя «неправильно».

Process\Handle Count

Количество дескрипторов, обрабатываемых процессом. Это могут быть как файлы, так и ключи реестра. Количество оных, превышающее 10000 может служить показателем неправильной работы приложения.

Process\Thread Count

Количество потоков внутри процесса. Стоит внимательнее изучить поведение приложения, если разница между минимальным и максимальным числом оных превысит 500.

Process\Private Bytes

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

У большинства вышеприведённых счётчиков нет чёткого показателя того, что в системе появилось «бутылочное горлышко». Все приведённые значения строились по среднестатистическим результатам и могут варьироваться для различных систем в широком диапазоне. Чтобы воспользоваться данными счётчиками грамотно, мы должны знать хотя бы показатели системы при её нормальной работе. Это называется baseline performance – perfmon лог, снятый с работающей свежеустановленной (последнее необязательно, никогда не поздно снять данный лог или вести учёт изменения baseline производительности в долгосрочной перспективе) системы, не имеющей проблем. Это достаточно важный момент, часто многими опускаемый, хотя в будущем он может серьёзно сократить возможный простой системы и в явной форме ускорить анализ полученных данных из приведённых выше счётчиков.

Взято с ]]>https://ru.intel.com/business/community/?automodule=blog&blogid=57161&sh...]]>

0 0

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<