Эпиграф:
Существуют две причины, по которым может тормозить компьютер:
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 utilization = 8 * \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 |
Служит для построения базовой линии загрузки сервера |
Возможно у вас есть свое мнение по поводу мониторинга оборудования, приходите в комментарии, пишите свои мысли, желательно со ссылками на источники знаний.
Статья продолжает серию публикаций:
Сервер 1С:Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана
Подготовка к экзамену 1С:Специалист по платформе. Рецепты от Капитана