Pull to refresh

Настройка сборки данных в Performance Monitor Windows Server

Reading time 14 min
Views 21K
Каждый опытный сисадмин знает, что лучший показатель ухудшения быстродействия 1С, это главный бухгалтер, движущийся в сторону ИТ отдела со скоростью, превышающей 1.1 м/с. Но только мудрейшие из них настраивают сбор счетчиков, чтобы эта встреча не застала их врасплох. Об этом и поговорим под катом…



Эпиграф:
Существуют две причины, по которым может тормозить компьютер:
1. Вирус.
2. Антивирус.

© советы бывалых сисадминов

Не ошибусь, если скажу, что каждый офисный админ сталкивался с вопросом: Почему тормозит 1С?

И опять же не ошибусь, если первое что он(а) при этом сделает, это откроет диспетчер задач.
Более продвинутые, конечно настроят сбор счетчиков Performance Monitor (Zabbix в данном контексте примерно то же самое). 

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

Внимание!

Название счетчиков отличается не только в зависимости от языка операционной системы, но и от ее редакции.

Добавим к этому видение и ошибки авторов публикаций и поймем, что простой копипаст может не сработать.


В случае же perfmon это усугубится тем, что никаких ошибок при создании счетчиков в командной строке вам выдано не будет, просто они не будут собираться.

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

  • typeperf -q [object] выведет список всех счетчиков
  • typeperf -qх [object] выведет список всех счетчиков по экземплярам оборудования, например отдельно для дисков А: и С: 

Где необязательный параметр [object] это фильтр по виду счетчиков, например PhysicalDisk
Этот вывод можно переадресовать в файл и далее уже из него выбирать необходимое
typeperf -qx  -y -o counters.txt

В дальнейшем, чтобы получить сводную статистику нужно заменить  в случае ключа -qx имя конкретного экземпляра на (_Total), а чтобы получить статистику для каждого экземпляра отдельно на (*)

Например:

\PhysicalDisk(_Total)\Current Disk Queue Length 
\PhysicalDisk(*)\Current Disk Queue Length 

Рекомендуемый мной путь, это создать bat файл из 3 строк.

logman create counter 1C_counter -f bincirc 
logman update counter 1C_counter -cf assembled.txt 
logman update counter 1C_counter -si 15 -v mmddhhmm 


А в файл assembled.txt добавлять названия счетчиков. По одному на строку. Рабочий и рекомендуемый мной пример для Windows Server 2012 R2 ENG будет внизу.

список под спойлером
 

\Processor(_Total)\% Processor Time 
\Processor(_Total)\% User Time 
\Processor(_Total)\% Privileged Time 
\Memory\Available MBytes 
\Memory\Pages/sec 
\Memory\% Committed Bytes In Use 
\Paging File(*)\% Usage 
\System\Context Switches/sec 
\System\Processor Queue Length 
\System\Processes 
\System\Threads 
\PhysicalDisk(_Total)\Current Disk Queue Length 
\PhysicalDisk(*)\Current Disk Queue Length 
\PhysicalDisk(_Total)\Avg. Disk sec/Read 
\PhysicalDisk(_Total)\Avg. Disk sec/Write 
\Network interface(_Total)\Bytes Total/sec 
\Network interface(_Total)\Current Bandwidth 

\Process(1cv8)\% Processor Time
\Process(1cv8)\Private Bytes
\Process(1cv8)\Virtual Bytes
\Process(ragent)\% Processor Time
\Process(ragent)\Private Bytes
\Process(ragent)\Virtual Bytes
\Process(rphost)\% Processor Time
\Process(rphost)\Private Bytes
\Process(rphost)\Virtual Bytes
\Process(rmngr)\% Processor Time
\Process(rmngr)\Private Bytes
\Process(rmngr)\Virtual Bytes
\Process(sqlservr)\% Processor Time
\Process(sqlservr)\Private Bytes
\Process(sqlservr)\Virtual Bytes

\SQLServer:General Statistics\User Connections
\SQLServer:General Statistics\Processes blocked
\SQLServer:Buffer Manager\Buffer cache hit ratio
\SQLServer:Buffer Manager\Page life expectancy
\SQLServer:SQL Statistics\Batch Requests/sec
\SQLServer:SQL Statistics\SQL Compilations/sec
\SQLServer:SQL Statistics\SQL Re-Compilations/sec
\SQLServer:Access Methods\Page Splits/sec
\SQLServer:Access Methods\Forwarded Records/sec
\SQLServer:Access Methods\Full Scans/sec
\SQLServer:Memory Manager\Target Server Memory (KB)
\SQLServer:Memory Manager\Total Server Memory (KB)
\SQLServer:Memory Manager\Free Memory (KB)
\SQLServer:Databases(_Total)\Transactions/sec
\SQLServer:Databases(*)\Transactions/sec
 

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

Начнем с изучения советов самого вендора: microsoft.com
Публикация Windows VM health


таблица под спойлером
Группа оборудования Название счетчика
Logical disk  
  Logical disk average disk seconds per transfer
  Logical disk average disk seconds per write
  Logical disk current disk queue length
  Logical disk free space megabytes low
  Logical disk percent idle time
  Logical disk free space percent low
  File system error or corruption
Operating system  
  Memory available megabytes
  Memory free system page table entries
  Memory pages per second
  Memory percent committed memory in use
  Total CPU utilization percentage
  DHCP Client service health
  DNS Client Service Health
  Event Log service health
  Windows Firewall service health
  RPC service health
  Server service health
  Windows Remote Management (WinRM) service health
Network adapter  
  Network adapter connection health
  Network adapter percent bandwidth used read
  Network adapter percent bandwidth used total
  Network adapter percent bandwidth used write
Disk  
  Disk current disk queue length
  Disk percent idle time
  Disk average seconds per read
  Disk average disk seconds per transfer
  Disk average disk seconds per write


Используя этот вариант вы точно не ошибетесь, но в нем присутствуют счетчики не совсем нужные для мониторинга именно сервера 1С.

Далее, а скорее и выше, в моем топе вариантов идет рекомендация от Евгения Валерьевича Филиппова
Настольная книга 1С: Эксперта по технологическим вопросам. Издание 2


Список небольшой, но все по делу и видно, что автор его использовал в работе.
 

таблица под спойлером
Группа оборудования Счетчик Предельные значения
Logical disk    
Operating system    
  \Memory(_ Total)\%% Committed Bytes In Use Не должен превышать размер оперативной памяти.
  \Memory(_Total)\Available Bytes Приближение к нулю свидетельствует о недостатке оперативной памяти.
  \Memory(_Total)\Pages/sec  
  \Processor(_Total)\%% Processor Time Не более 70 % в течение длительного времени.
  \System(_Total)\Processor Queue Length Не более 2 * количество ядер процессоров в течение длительного времени
Network adapter    
  \Network lnterface(*)\Bytes Total/ sec  
Disk    
  \PhysicalDisk(*)\Avg. Disk Queue Length Не более 2 * количество дисков, работающих параллельно
  \PhysicalDisk(_Total)\Avg. Disk Queue Length
  \PhysicalDisk(_Total)\Avg. Disk Sec/Read При работе с дисковым кешем нормальное время на чтение или запись обычно составляет менее 10 мс. В случае работы с дисками время на чтение или запись не должно превышать 50-200 мс.
  \PhysicalDisk(_Total)\Avg. Disk Sec/Write


Список книги Методическое пособие по эксплуатации крупных информационных систем на платформе «1С: Предприятие 8»
А. Асатрян, А. Голиков, А. Морозов, Д. Соломатин, Ю.Федоров

еще лаконичнее, в него добавлен мониторинг 1cv8, ragent, rphost, rmngr его я вынесу в отдельный список, потому что он может и наверное не помешает при любом варианте, кроме разнесенных SQL и 1С серверов.

таблица под спойлером
 "\Process("1cv8*")\%%Processor Time"
"\Process("1cv8*")\Private Bytes"
"\Process("1cv8*")\Virtual Bytes"
"\Process("ragent*")\%%Processor Time"
"\Process("ragent*")\Private Bytes"
"\Process("ragent*")\Virtual Bytes"
"\Process("rphost*")\%%Processor Time"
"\Process("rphost*")\Private Bytes"
"\Process("rphost*")\Virtual Bytes"
"\Process("rmngr*")\%%Processor Time"
"\Process("rmngr*")\Private Bytes"
"\Process("rmngr*")\Virtual Bytes"

или как вариант без разбиения

\Process(1cv8)\% Processor Time
\Process(1cv8)\Private Bytes
\Process(1cv8)\Virtual Bytes
\Process(ragent)\% Processor Time
\Process(ragent)\Private Bytes
\Process(ragent)\Virtual Bytes
\Process(rphost)\% Processor Time
\Process(rphost)\Private Bytes
\Process(rphost)\Virtual Bytes
\Process(rmngr)\% Processor Time
\Process(rmngr)\Private Bytes
\Process(rmngr)\Virtual Bytes
\Process(sqlservr)\% Processor Time
\Process(sqlservr)\Private Bytes
\Process(sqlservr)\Virtual Bytes

Список счетчиков оборудования.
 
таблица под спойлером
Группа оборудования Счетчик
Logical disk  
  \LogicalDisk(_Total)\Free Megabytes
Operating system  
  \Memory(_Total)\Pages/sec
  \Memory\Available Mbytes
  \Processor(_Total)\%% Processor Time
  \System(_Total)\Processor Queue Length
Network adapter  
  \Network lnterface(*)\Bytes Total/ sec
Disk  
  \PhysicalDisk(*)\Avg. Disk Bytes/Read
  \PhysicalDisk(*)\Avg. Disk Bytes/Write
  \PhysicalDisk(*)\Avg. Disk Queue Length
  \PhysicalDisk(_Total)\Avg. Disk Queue Length


Далее идет статья с ИТС Анализ загруженности оборудования для Windows Елена Скворцова и ее полная копия на kb у кого есть туда доступ, в ней подробно и с картинками описан весь процесс настройки. Для первой настройки это очень полезно.
При всей полезности и доступности статьи не покидает ощущение, что ее писали как знаменитое письмо Матроскина: "ваш сын дядя Шарик", разные люди. Например текст не совпадает с картинками, для некоторых счетчиков описаны пороговые значения, но в списке их нет, некоторые счетчики в списке двоятся, из-за этого не получится копипастом в командной строке запустить logman. Это как раз начинающих немного обескураживает.



Лирическое отступление: Не прошло и месяца с регионального тура конкурса ИТС, где один из вопросов был именно так составлен, в коде вариант ответа один, а в картинке и математически верный совсем другой. Организаторы опирались именно на корректность кода. Хотя понятно, код проверяют слабо, во всех научных книгах об этом предупреждают заранее.
 
таблица под спойлером
Группа оборудования Счетчик Предельные значения
Logical disk    
  \LogicalDisk(_Total)\% Free Space  
Operating system    
  \Memory\Available Mbytes  
  \Processor(_Total)\% Idle Time  
  \Processor(_Total)\% Processor Time Не более 70% в течение длительного времени
  \Processor(_Total)\% User Time  
  \Processor(_Total)\Interrupts/sec  
  \System\Context Switches/sec  
  \System\File Read Bytes/sec  
  \System\File Write Bytes/sec  
  \System\Processes  
  \System\Processor Queue Length Не более 2 * количество ядер процессоров в течение длительного времени
  \System\Threads  
    Memory Pages/sec Интенсивность обмена между дисковой подсистемой и оперативной памятью
Среднее: около 0
Максимальное: не более 20
Network adapter   Не более 65% от пропускной способности сетевого адаптера
Disk    
  \PhysicalDisk(_Total)\Avg. Disk Queue Length Не более 2 * количество дисков, работающих параллельно
  \PhysicalDisk(_Total)\Avg. Disk Sec/Read  
  \PhysicalDisk(_Total)\Avg. Disk Sec/Write  


Замыкают список иностранные агенты вендоры. 
www.veritas.com Analyzing SQL Performance using Performance Monitor Counters


Понятно, что про 1С они и слыхом не слыхивали, но то, что серверов они видели на порядок более, это факт.
 
таблица под спойлером
Группа оборудования Счетчик Предельные значения
Logical disk    
     
Operating system    
  Memory: Available Bytes Этот показатель должен быть выше 25% установленной памяти. Обратите внимание, что это значение является динамическим и отображает только последнее проверенное значение, а не среднее
  Memory: Cache Faults /sec  
  Memory: Page Faults /sec  
  Memory: Page Input /sec не должно превышать 15
  Memory: Page Reads /sec постоянные значения выше 5 указывают на более пристальный взгляд на Физический диск
  Memory: Pages/sec В среднем 20 или меньше — это нормально
  Paging File: % Usage  
  Processor: % Processor Time_Total Не превышать 80% в течение 10+ минут в течение 24 часов
  System: Processor Queue Length Не должно превышать 2 на процессор в течение 10+ минут в течение 24 часов. Например, если сервер содержит 4 процессора, количество не должно превышать 8 за 10-минутный период.
     
     
     
Network adapter    
  Network Interface: Bytes Received/sec  
  Network Interface: Bytes Sent/sec  
  Network Interface: Bytes/sec  
  Network Interface: Output Queue Length всегда должна быть 0, но может достигать 2 на мгновение
Disk    
  Physical Disk: Disk Writes/sec  
  Physical Disk: Disk Reads/sec должно быть меньше 20 мс, если более 50 мс указывает на серьезное узкое место
  Physical Disk: Avg. Disk Write Queue Length Длина очереди диска (не должна быть больше, чем количество шпинделей плюс 2)
  Physical Disk: Avg. Disk Write /sec  
  Physical Disk: Avg. Disk Read Queue Length  
  Physical Disk: Avg. Disk Read /sec  
  Physical Disk: Avg. Disk Queue Length Превышение 2 на диск (3 дисковых массива = 6) на 10+ минут в течение 24 часов указывает на узкое место диска.


red-gate.com
SQL Server performance and activity monitoring


 
таблица под спойлером
Группа оборудования Счетчик Предельные значения
Logical disk    
  Logical Disk: Avg. Disk Queue Length Из-за изменений в технологиях, таких как виртуализация, технология дисков и контроллеров, SAN и многое другое, этот счетчик больше не является хорошим индикатором узких мест ввода-вывода. Лучшим показателем узких мест ввода-вывода является Disk avg. время чтения и средн. время записи
  Logical Disk: Avg. Disk sec/Read Для дисков с файлами MDF и NDF и загрузкой OLTP средняя задержка чтения в идеале должна быть ниже 20 мс. Для дисков с нагрузкой OLAP приемлемой считается задержка до 30 мс. Для дисков с файлами LDF задержка в идеале должна составлять 5 мс или меньше. В общем, все, что превышает 50 мс, является медленным и предполагает потенциально серьезное узкое место ввода-вывода.
  Logical Disk: Avg. Disk sec/Write Для дисков с файлами MDF и NDF и загрузкой OLTP средняя задержка записи в идеале должна быть ниже 20 мс. Для дисков с нагрузкой OLAP приемлемой считается задержка до 30 мс. Для дисков с файлами LDF задержка в идеале должна составлять 5 мс или меньше. В общем, все, что превышает 50 мс, является медленным и предполагает потенциально серьезное узкое место ввода-вывода.
  Logical Disk: Disk Transfers/sec Число передач диска в секунду не должно превышать пропускную способность дисковой подсистемы IOPS
  LogicalDisk: Free Megabytes  
Operating system    
  Memory: Pages/sec Если количество страниц памяти в секунду превышает 1000, а количество доступных байтов меньше 100 МБ на постоянной основе, это явный признак нехватки памяти
  Memory: Available Bytes  
  Processor: % Processor Time (_Total) Если время « Машина: процессор» превышает в среднем 80% в течение длительного времени (пять минут или более), то в это время существует узкое место ЦП
  System: Processor Queue Length Число, превышающее 10 потоков на процессор, указывает на узкое место ЦП
     
     
     
Network adapter    
  Network Interface: Bytes Received/sec 8 * ((Сетевой интерфейс: получено байтов / сек) + (Сетевой интерфейс: отправлено байтов / сек)) / (Сетевой интерфейс: текущая пропускная способность) * 100
  Network Interface: Bytes Sent/sec  
Disk    


Что касается, счетчиков для MS SQL, то мой список был в начале публикации.

Вариантов невероятное множество как и экспертов (не факт, что сейчас один из них не съехал тихо под стол при виде его).
Впрочем, настоящий скульный админ никогда не покажет своего отношения, максимум поиграет бровями и пойдет слушать музыку сервера.

Желающие могут провести пару зимних (летних) вечеров разбирая полный список.

таблица под спойлером


— Штурман, приборы!
— Четырнадцать.
— Что четырнадцать?
— А что, приборы!?
©www.anekdot.ru


Бдительный читатель скажет: Мало собрать счетчики оборудования, надо их еще и проанализировать.
А я  покажу ему вот эту таблицу.

Техническое отступление: Хотя ней выражено мнение уважаемых экспертов, относиться к нему надо с пониманием.

Например, многие вспомнят времена, когда они умоляли директора докупить планку 32 Мб в сервер упомянутой выше бухгалтерии. То же касается и скорости дисков. Эти значения устаревают.


Внимание!

Что означает словосочетание "Предельные значения". То что их превышение требует вашего внимания и сервер работает не совсем штатно по мнению собравшихся. Не более того. Более того, может быть как раз для вашего варианта работы это нормально.


Счетчик Предельные значения
\Processor(_Total)\% Processor Time Не более 70% — 80% в течение длительного времени, под длительным обычно понимается +10 минут. 50% — нормальная загрузка сервера
\Processor(_Total)\% User Time Учитывая тот факт, что % Processor Time = % User Time + % Privileged Time, то в идеале значения % User Time должны стремиться к % Processor Time, а доля % Privileged Time стремиться к 0
\Processor(_Total)\% Privileged Time Норма % Privileged Time составляет 5-10%, о проблемах говорят значения >20%. Обычно это проблема с драйверами
\Memory\Available MBytes Постоянное и равномерное уменьшение счетчика указывает на утечку памяти в одном из приложений. Желательное состояние — 25% от общей памяти
\Memory\Pages/sec По мнению 1С Максимальное: не более 20, в сети встречаются допустимые варианты и в 1000. Рассматривается совместно с Memory Available. Желательное состояние около 0.
\Memory\% Committed Bytes In Use Не должен превышать размер оперативной памяти у Филлипова, но это видимо опечатка. Memory \% Committed Bytes in Use представляет собой соотношение величин Memory/Committed Bytes и Memory\Commit Limit исчисляется в процентах и должен быть менее 90%, больше 95% появится вероятность возникновения ошибки OutOfMemory.
\Paging File(*)\% Usage Рассматривается совместно с предыдущими счетчиками, по мнению Microsoft при  остальных штатных значениях 100% возможный вариант, желательное значение от 50 до 75%
\System\Context Switches/sec Высокое значение — более 5000 переключений контекста/с.
Очень высокое значение — более 15000 переключений контекста/с
\System\Processor Queue Length Не более 2 * количество ядер процессоров в течение длительного времени
\System\Processes Служит для построения базовой линии загрузки сервера
\System\Threads Служит для построения базовой линии загрузки сервера
\PhysicalDisk(_Total)\Current Disk Queue Length В статье ИТС: Не более 2 * количество дисков, работающих параллельно, в основном его не рекомендуют больше использовать из-за виртуализации.
Из-за изменений в технологиях, таких как виртуализация, технология дисков и контроллеров, SAN и многое другое, этот счетчик больше не является хорошим индикатором узких мест ввода-вывода.
\PhysicalDisk(*)\Current Disk Queue Length Аналогично
\PhysicalDisk(_Total)\Avg. Disk sec/Read Этот показатель рекомендуется рассматривать как замену Current Disk Queue Lengt. Для дисков с файлами MDF и NDF и загрузкой OLTP средняя задержка записи в идеале должна быть ниже 20 мс. Для дисков с нагрузкой OLAP приемлемой считается задержка до 30 мс. Для дисков с файлами LDF задержка в идеале должна составлять 5 мс или меньше. В общем, все, что превышает 50 мс, является медленным и предполагает потенциально серьезное узкое место ввода-вывода. У 1С — не более 50-200 мс.
\PhysicalDisk(_Total)\Avg. Disk sec/Write Аналогично
 
\Network interface(_Total)\Bytes Total/sec Не более 65% от пропускной способности сетевого адаптера
\Network interface(_Total)\Current Bandwidth Network utilization8 * \Network interface(_Total)\Bytes Total/sec / (Network Interface: Current Bandwidth) *100
   
\SQLServer:General Statistics\User Connections Служит для построения базовой линии загрузки сервера
\SQLServer:General Statistics\Processes blocked В идеале близок к 0
\SQLServer:Buffer Manager\Buffer cache hit ratio Если на вашем сервере запущены приложения для онлайн-обработки транзакций (OLTP), а это как раз торговые базы 1С, значение 99% или выше является идеальным, но все, что выше 90%, обычно считается удовлетворительным. Значение 90% или ниже может указывать на увеличенный доступ к вводу-выводу и более низкую производительность.
\SQLServer:Buffer Manager\Page life expectancy Некоторые говорят, что значение ниже 300 (или 5 минут) означает, что вам может потребоваться дополнительная память.
\SQLServer:SQL Statistics\Batch Requests/sec Служит для построения базовой линии загрузки сервера и совместно с другими показателями
\SQLServer:SQL Statistics\SQL Compilations/sec В идеале в 10 раз меньше Batch Requests/sec
\SQLServer:SQL Statistics\SQL Re-Compilations/sec В идеале в 10 раз меньше SQL Compilations/sec
\SQLServer:Access Methods\Page Splits/sec В идеале меньше чем 20% от Batch Requests/sec
\SQLServer:Access Methods\Forwarded Records/sec Служит для построения базовой линии загрузки сервера. Помогает понять, насколько фрагментированы таблицы SQL Server без кластерного индекса, не должен устойчиво расти со временем.
\SQLServer:Access Methods\Full Scans/sec Служит для построения базовой линии загрузки сервера, при самописных конфигурациях или тюнинге системы используется совместно с  Index searches/sec
\SQLServer:Memory Manager\Target Server Memory (KB) Служит для построения базовой линии загрузки сервера
\SQLServer:Memory Manager\Total Server Memory (KB) Служит для построения базовой линии загрузки сервера
\SQLServer:Memory Manager\Free Memory (KB) Служит для построения базовой линии загрузки сервера
\SQLServer:Databases(_Total)\Transactions/sec Служит для построения базовой линии загрузки сервера
\SQLServer:Databases(*)\Transactions/sec Служит для построения базовой линии загрузки сервера
   
\Process(1cv8)\% Processor Time
\Process(1cv8)\Private Bytes
\Process(1cv8)\Virtual Bytes
\Process(ragent)\% Processor Time
\Process(ragent)\Private Bytes
\Process(ragent)\Virtual Bytes
\Process(rphost)\% Processor Time
\Process(rphost)\Private Bytes
\Process(rphost)\Virtual Bytes
\Process(rmngr)\% Processor Time
\Process(rmngr)\Private Bytes
\Process(rmngr)\Virtual Bytes
\Process(sqlservr)\% Processor Time
\Process(sqlservr)\Private Bytes
\Process(sqlservr)\Virtual Bytes
Служит для построения базовой линии загрузки сервера
   

Возможно у вас есть свое мнение по поводу мониторинга оборудования, приходите в комментарии, пишите свои мысли, желательно со ссылками на источники знаний.
Tags:
Hubs:
+2
Comments 8
Comments Comments 8

Articles