ChatStress Tool
Предыдущие статьи:
- Установка Persistent Chat
- Настройка Persistent Chat
- Persistent Chat создание комнаты
- Persistent chat настройка уведомлений
- Persistent Chat. Управление сообщениями
- Архивация Persistent Chat. Часть 1
- Архивация Persistent Chat. Часть 2
- Persistent Chat Resource Kit. Часть 1. AffCheck
- Persistent Chat Resource Kit . Часть 2. ChatUsageReport
- Persistent Chat Resource Kit. Часть 3. ChatMonitoringSummary
ChatStress Tool – Утилита симуляции нагрузки на службу Сохраняемого чата, для тестирования используемой конфигурации.
Любой администратор должен планировать нагрузку на службы которые расположены на серверах и естественно службы Lync 2013 не являются исключением. Во время планирования структуры Lync 2013 производятся различные мероприятия. В первую очередь это Microsoft Lync Server Planning Tool 2013 и Lync Server 2013 Stress and Performance Tool, а уже после развертывания службы Persistent Chat, нагрузочные тесты ChatStressTool.
Предварительная подготовка.
Для тестовой среды создадим 10 пользователей в домене. Для этого выполним скрипт:
For ($i=0; -le 10; $i++){
$name="Name1_$i"
$sn="sn1_$i"
$logon="Name1_$i"
$Pass='pass'
$Password=ConvertTo-SecureString -AsPlainText -Force -String $Pass
New-ADUser -Enabled 1 -name $name -AccountPassword $Password -Displayname "$name $sn" -GivenName $name -UserPrincipalname $logon@test.lo -SamAccountName $logon -Surname $sn -Path "OU=Pattern_Users,OU=Test,DC=test,DC=lo" -CannotChangePassword $true -PasswordNeverExpires $true -ChangePasswordAtLogon $false
Так же создадим новую категорию для тестов с именем Test и 50 комнат открытых для всех:
for ($i = 1; $i -le 50; $i++) { New-CsPersistentChatRoom -Category Test -Name "StressChan_$i" -Privacy Open }
Теперь, что касается тестовых машин. Для теста я использую 2 машины, но этим можно не ограничиваться. Основное условие: на тестовых машинах должны быть установлены: .NET 4.5 Framework и Visual C++ 2012 Redistributable. Машины я развернул на Hyper-V особо не заморачиваясь над конфигурацией, ибо загрузка тестовая.
Созданных тестовых пользователей добавим в тестовую категорию посредством панели управления. У нас пользователей всего 10. Если же будете проверять на большем количестве, то желателен скрипт подобный тому, что выше.
Теперь настроим утилиту нагрузки.
Настройка утилиты осуществляется конфигурированием двух файлов
· StressLauncher.exe.config
· LoaderProcess.exe.config
Настроенные файлы для тестовой конфигурации ниже. Обратите внимание на выделенные элементы:
1. Измените значение “LoaderBinary” на путь к общей папке где находится LoaderProcess.exe.
2. Измените “AdminUser”/”AdminPassword” на имя и пароль пользователя имеющего доступ к тестовым загрузочным машинам.
3. Измените “ChannelCategory” на имя тестового канала Test.
4. Измените “UserNamePattern” and “UserPasswordPattern” в соответствиии с шаблоном пользователей заведенных скриптом. {0} Заменяет индекс пользователя.
5. Измените “Domain” На домен топологии, которую мы тестируем.
6. Измените “ConnectionString” на значение соответствующее подключению к базе данных.
7. Измените начальный индекс пользователя с которого начнется тестирование “UserIndexStart”.
8. Измените “LyncFQDN” на полное имя вашего сервера Lync.
9. Добавьте тестовые машины в раздел “Machines”.
10. Измените "baseAddress" на значение вашего контроллера (по умолчанию “controller.contoso.com”)
Файлы конфигурации под спойлером
Открыть спойлер
StressLauncher.exe.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Microsoft.Rtc.Chat.ResKit.Stress.Launcher.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Microsoft.Rtc.Chat.ResKit.Stress.Launcher.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<userSettings>
<Microsoft.Rtc.Chat.ResKit.Stress.Launcher.Properties.Settings>
<setting name="NumUsers" serializeAs="String">
<value>80000</value>
</setting>
<setting name="TargetSizeSmall" serializeAs="String">
<value>30</value>
</setting>
<setting name="TargetSizeMedium" serializeAs="String">
<value>150</value>
</setting>
<setting name="TargetSizeLarge" serializeAs="String">
<value>16000</value>
</setting>
<setting name="SigninsPerMinute" serializeAs="String">
<value>12000</value>
</setting>
<setting name="MessageRateSmall" serializeAs="String">
<value>0.0017</value>
</setting>
<setting name="MessageRateMedium" serializeAs="String">
<value>0.017</value>
</setting>
<setting name="MessageRateLarge" serializeAs="String">
<value>0.0035</value>
</setting>
<setting name="DayHours" serializeAs="String">
<value>8</value>
</setting>
<setting name="JoinsSmall" serializeAs="String">
<value>12</value>
</setting>
<setting name="JoinsMedium" serializeAs="String">
<value>2</value>
</setting>
<setting name="JoinsLarge" serializeAs="String">
<value>2</value>
</setting>
<setting name="PresenceEnabled" serializeAs="String">
<value>True</value>
</setting>
<setting name="MinPollSize" serializeAs="String">
<value>10</value>
</setting>
<setting name="MaxPollSize" serializeAs="String">
<value>40</value>
</setting>
<setting name="PollInterval" serializeAs="String">
<value>00:04:00</value>
</setting>
</Microsoft.Rtc.Chat.ResKit.Stress.Launcher.Properties.Settings>
</userSettings>
<applicationSettings>
<Microsoft.Rtc.Chat.ResKit.Stress.Launcher.Properties.Settings>
<setting name="LoaderBinary" serializeAs="String">
<value>\\test-lync2013.test.lo\ChatStressTool\LoaderProcess.exe</value>
</setting>
<setting name="AdminUser" serializeAs="String">
<value>test\administrator</value>
</setting>
<setting name="AdminPassword" serializeAs="String">
<value>1q`</value>
</setting>
<setting name="ChannelCategory" serializeAs="String">
<value>Test</value>
</setting>
<setting name="UserNamePattern" serializeAs="String">
<value>Name1_{0}</value>
</setting>
<setting name="UserPasswordPattern" serializeAs="String">
<value>1q`</value>
</setting>
<setting name="Domain" serializeAs="String">
<value>test.lo</value>
</setting>
<setting name="ConnectionString" serializeAs="String">
<value>Data Source=test-lync2013\pchat;Initial Catalog=mgc;integrated security=SSPI</value>
</setting>
<setting name="UserIndexStart" serializeAs="String">
<value>1</value>
</setting>
<setting name="LyncFQDN" serializeAs="String">
<value>test-lync2013.test.lo</value>
</setting>
<setting name="Machines" serializeAs="Xml">
<value>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>test-pc.test.lo</string>
</ArrayOfString>
</value>
</setting>
</Microsoft.Rtc.Chat.ResKit.Stress.Launcher.Properties.Settings>
</applicationSettings>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="customTcpBinding" receiveTimeout="3.00:00:00"
sendTimeout="00:05:00">
<binaryMessageEncoding />
<reliableSession inactivityTimeout="2.00:00:00" maxPendingChannels="20"
maxRetryCount="16" maxTransferWindowSize="1024" ordered="false"
reliableMessagingVersion="Default" />
<tcpTransport maxPendingConnections="10" maxPendingAccepts="10"
listenBacklog="10">
<connectionPoolSettings idleTimeout="1.00:00:00" />
</tcpTransport>
</binding>
</customBinding>
</bindings>
<client/>
<services>
<service behaviorConfiguration="Behavior" name="Microsoft.Rtc.Chat.ResKit.Stress.Controller.Service">
<endpoint address="" binding="customBinding" bindingConfiguration="customTcpBinding"
contract="Microsoft.Rtc.Chat.ResKit.Stress.Controller.IService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="net.tcp://test-dc.test.lo:4277/Controller/Service/" />
</baseAddresses>
<timeouts closeTimeout="00:00:15" />
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Behavior">
<serviceMetadata />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling maxConcurrentCalls="250" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<runtime>
<gcServer enabled="true" />
</runtime>
</configuration>
LoaderProcess.exe.config
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="Debug">
<callbackDebug includeExceptionDetailInFaults="true" />
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="customTcpBinding" receiveTimeout="3.00:00:00"
sendTimeout="00:05:00">
<binaryMessageEncoding />
<reliableSession inactivityTimeout="2.00:00:00" maxPendingChannels="20"
maxRetryCount="16" maxTransferWindowSize="1024" ordered="false"
reliableMessagingVersion="Default" />
<tcpTransport maxPendingConnections="10" maxPendingAccepts="10"
listenBacklog="10">
<connectionPoolSettings idleTimeout="1.00:00:00" />
</tcpTransport>
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="net.tcp://test-dc.test.lo:4277/Controller/Service/"
behaviorConfiguration="Debug" binding="customBinding" bindingConfiguration="customTcpBinding"
contract="Microsoft.Rtc.Chat.ResKit.Stress.Controller.IService"
name="Service" />
</client>
</system.serviceModel>
<runtime>
<gcServer enabled="true" />
</runtime>
</configuration>
После выполненных действий запустим утилиту
И нажмем Configure User Model
Настроим параметры в соответствии со скриншотом
Configure Presence Model оставим без изменений и нажмем Start Load
Через некоторое время должна появится активность. Если же этого не происходит, обратите внимание на все настройки, которые вы делали и самое главное, подключение к SQL. Проверьте запускаются ли процесс LoaderProcess.exe и нет ли каких-нибудь ошибок в журнале. Так же проверьте состояние контроллера домена.
Теперь можно замерять производительность сервера. А в конце процедуры не помешает запустить утилиту ChatMonitoringSummary
Комментариев нет:
Отправить комментарий