В этой статье приводится инструкция check-list, который является рекомендуемым при настройке крупных информационных систем.
Также в статье приводится набор скриптов, которые оказались полезны при эскплуатации.
Настройка выполняется с помощью файла logcfg.xml.
Пример настройки технологического журнала.
Копировать в буфер обмена<?xml version="1.0" encoding="UTF-8"?> <config xmlns="http://v8.1c.ru/v8/tech-log"> <dump create="true" location="C:\DUMPS" type="3" prntscrn="false" externaldump="1"/> <log location="C:\LOGS\All" history="28"> <event> <eq property="Name" value="EXCP"/> </event> <event> <eq property="Name" value="PROC"/> </event> <event> <eq property="Name" value="ADMIN"/> </event> <event> <eq property="Name" value="CONN"/> </event> <event> <eq property="Name" value="SESN"/> </event> <event> <eq property="Name" value="CLSTR"/> </event> <event> <eq property="Name" value="SRVC"/> </event> <property name="all"/> </log> <log location="C:\LOGS\CallScall" history="28"> <event> <eq property="Name" value="CALL"/> </event> <event> <eq property="Name" value="SCALL"/> </event> <property name="Context"> <event> <eq property="name" value=""/> </event> </property> <property name="all"/> </log> </config>
В данном примере события CALL и SCALL собираются без контекстов, что в значительной мере сокращает объем собираемых журналов. Однако в некоторых случаях контексты необходимы.
Тогда часть
Копировать в буфер обмена<property name="Context"> <event> <eq property="name" value=""/> </event> </property>
необходимо будет удалить.
Обратите внимание, что history="28" указан равным 28 часам, что при достаточно интенсивной нагрузке может привести к сбору достаточно большого объема журналов.
Если места на дисках не достаточно, лучше отказаться от журнала с CALL, SCALL, а сбор «основного» журнала "C:\LOGS\All"сократить до 12 часов.
Копировать в буфер обмена<?xml version="1.0" encoding="UTF-8"?> <config xmlns="http://v8.1c.ru/v8/tech-log"> <dump create="true" location="C:\DUMPS" type="3" prntscrn="false" externaldump="1"/> <log location="C:\LOGS\All" history="12"> <event> <eq property="Name" value="EXCP"/> </event> <event> <eq property="Name" value="PROC"/> </event> <event> <eq property="Name" value="ADMIN"/> </event> <event> <eq property="Name" value="CONN"/> </event> <event> <eq property="Name" value="SESN"/> </event> <event> <eq property="Name" value="CLSTR"/> </event> <event> <eq property="Name" value="SRVC"/> </event> <property name="all"/> </log> </config>
Следует также настроить архивирование технологических журналов с последующим копированием на сетевой ресурс.
Запуск счетчика добавлен в Task Schedule.
Инструкция по настройки дампов находится здесь.
Другие (не рабочие) базы и кластеры должны отсутствовать.
«Исключением» из данного правила могут являться «обслуживающие» (хотя всё же продукционные) информационные базы, такие как:
и т.п.
Обратите внимание, что не должно быть
Ограничения по безопасному расходу памяти либо «По умолчанию», либо имеют такие значения, при которых они действительно могут сработать на конкретном оборудовании.
Не должно быть установлено таких значений, которые «отключают» работу механизмов контроля потребления памяти на вызов.
в определенной директории, например, C:\Utils
Ярлык на эту директорию должен быть на рабочем столе.
Например, C:\Scripts
Ярлык на эту директорию должен быть на рабочем столе.
Примеры скриптов приведены в конце статьи.
У пользователя ОС, от которого запущен rphost, вхождение в группу Windows Performance Monitor Users.
Если тест успешно не выполняется (т.е. смс или письмо не приходят), но проверять наличие доступа к соответствующим серверам.
Windows Performance Toolkit входит в комплект Windows 8.1 SDK.
После установки проверяется возможность запустить Windows Performance Recorder с опцией “Resource Analysis”\”CPU Usage” на несколько секунд.
При использовании файла swpuser.ini пользователь, от имени которого работает главный агент кластера (ragent), должен иметь административные права. Дополнительно следует обеспечить наличие этого пользователя в локальных политиках безопасности: Adjust memory quotas for a process (сюда обычно входит группа Администраторы) и Replace a process level token (обычно группа Администрторы сюда не входит). Необходимо помнить, что инсталятор не подготавливает почву для использования swpuser.ini. Поэтому для использования swpuser.ini все предлагаетя сделать руками: создать пользователей, дать им права и т. п. Важно, что пользователям, от которых запускаются рабочие процессы и менеджеры кластера, в Windows должен быть создан профиль. Он необходим для правильного размещения:
Наиболее простой способ создания профиля - однократный интерактивный вход.
Должно быть явно указано расположение именно этих сервисов, т.к. их корректная работа зависит от расположения файлов кластера. При наличии нескольких рабочих серверов в кластере нужно не допускать возможность переезда этих сервисов между рабочими серверами.
Лучше для каждой продукционной информационной базы создавать отдельного пользователя. Это нужно в первую очередь при расследовании каких-либо проблема на сервере СУБД. Если на сервере СУБД расположено более одной продукционной базы данных, может возникнуть необходимость максимально быстро расследовать проблему. При этом под рукой в отчетах или трассировках всегда будет имя пользователя, который в данный момент работает с сервером баз данных, как следствие будет и понимание, к какой именно информационной базе относится этот пользователь.
Желательно на рабочем столе всегда видеть:
В Control Panel\All Control Panel Items\Power Options необходимо указать "High Performance".
Например, не установлена настройка 1 rphost на 1 информационную базу при наличии большого числа информационных баз в кластере серверов.
На виртуальных машинах обеспечено гарантированное выделение ресурсов, суммарный объем выданной оперативной памяти в виртуальных машинах, меньше объема имеющейся памяти на хосте.
требуется установленный SQL ServerNativeClientfor SQL Server 2005 (и более старших версий Microsoft SQL Server). Проверка наличия установленного SQL ServerNativeClientосуществляется при выполнении следующих операций:
taskkill /F /IM ragent.exe taskkill /F /IM rmngr.exe taskkill /F /IM rphost.exe taskkill /F /IM httpd.exe taskkill /F /IM w3wp.exe taskkill /F /IM 1cv8c.exe taskkill /F /IM 1cv8.exe
Этот скрипт должен выполняться из той же директории, в которой находится procdump.exe
Копировать в буфер обмена@ echo off echo Start dumping processes on this server... CD %~dp0 for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq rmngr.exe" ^| find /i "PID:"`) do ( start /b procdump.exe -ma %%a rmngr_%%a ) for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq rphost.exe" ^| find /i "PID:"`) do ( start /b procdump.exe -ma %%a rphost_%%a ) for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq ragent.exe" ^| find /i "PID:"`) do ( start /b procdump.exe -ma %%a ragent_%%a ) for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq ragent.exe" ^| find /i "PID:"`) do ( start /b procdump.exe -ma %%a ragent_%%a ) for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq httpd.exe" ^| find /i "PID:"`) do ( start /b procdump.exe -ma %%a httpd_%%a ) for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq w3wp.exe" ^| find /i "PID:"`) do ( start /b procdump.exe -ma %%a w3wp_%%a ) for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq 1cv8c.exe" ^| find /i "PID:"`) do ( start /b procdump.exe -ma %%a 1cv8c_%%a ) for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq 1cv8.exe" ^| find /i "PID:"`) do ( start /b procdump.exe -ma %%a 1cv8_%%a )
set LOG_FILE="scripts.log" set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)" set SERVICE_RAS_NAME="1C:Enterprise 8.3 Remote Server" set CNTX_PATH="C:\srvinfo\reg_1541" set PFL_PATH="C:\ProgramData\1C\1cv8" set TEMP_PATH="C:\Windows\Temp" echo stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% sc stop %SERVICE_1C_NAME% sc stop %SERVICE_RAS_NAME% timeout 5 taskkill /f /im "rphost.exe" taskkill /f /im "rmngr.exe" taskkill /f /im "ragent.exe" taskkill /f /im "ras.exe" timeout 5 echo done stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% echo clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% DEL /Q /F /S %CNTX_PATH%\snccntx* DEL /Q /F %PFL_PATH%\*.pfl DEL /Q /F /S %TEMP_PATH%\*.* echo done clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
set LOG_FILE="scripts.log" set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)" set SERVICE_RAS_NAME="1C:Enterprise 8.3 Remote Server" echo start %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% sc start %SERVICE_1C_NAME% sc start %SERVICE_ RAS _NAME% echo done start %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
set LOG_FILE="scripts.log" set SERVICE_1C_NAME="1C:Enterprise 8.3 Server Agent (x86-64)" set SERVICE_RAS_NAME="1C:Enterprise 8.3 Remote Server" set CNTX_PATH="C:\srvinfo\reg_1541" set PFL_PATH="C:\ProgramData\1C\1cv8" set TEMP_PATH="C:\Windows\Temp" echo stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% sc stop %SERVICE_1C_NAME% sc stop %SERVICE_RAS_NAME% timeout 5 taskkill /f /im "rphost.exe" taskkill /f /im "rmngr.exe" taskkill /f /im "ragent.exe" taskkill /f /im "ras.exe" timeout 5 echo done stop %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% echo clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% DEL /Q /F /S %CNTX_PATH%\snccntx* DEL /Q /F %PFL_PATH%\*.pfl DEL /Q /F /S %TEMP_PATH%\*.* echo done clean temp %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% echo start %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE% sc start %SERVICE_1C_NAME% sc start %SERVICE_ RAS _NAME% echo Service %SERVICE_1C_NAME% restarted at %DATE% %TIME% >> %TEMP_PATH%\%LOG_FILE%
N сильно зависит от вашей системы, нагрузки, конфигурации и т.д. В этом примере N = 8 Гб.
Копировать в буфер обмена@echo off REM MemLimit in bytes! REM MemLimit is 8 GB set MemLimit=8796093022208 echo MemLimit is set %MemLimit% bytes for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "IMAGENAME eq rphost.exe" ^| find /i "PID:"`) do ( for /f "usebackq tokens=1" %%c in (`"wmic process where ProcessId=%%a get WorkingSetSize"`) do ( SET "var="&for /f "delims=0123456789" %%i in ("%%c") do set var=%%i if not defined var ( if /I %%c GTR %MemLimit% ( echo Killing process rphost_%%a with Mem Usage %%c for breaking limit %MemLimit% taskkill /F /PID %%a ) ) ) )