Orchestrator
2022.4
バナーの背景画像
Orchestrator インストール ガイド
最終更新日 2024年2月15日

パフォーマンスのベスト プラクティス

以下のページでは、大規模運用環境で推奨される要件について説明し、パフォーマンスの向上を目的とした一連のベスト プラクティスを示します。

注: Orchestrator を実行するための最小要件について詳しくは、「ハードウェア要件」と「ソフトウェア要件」のページをご覧ください。

大規模な運用環境の推奨要件

10,000 台の Attended ロボットまたは 1,000 台の Unattended ロボットを実行するには、以下が必要です。

  • F5 ロード バランサー
  • Orchestrator - 8 コアの CPU と 16GB の RAM を搭載したマシン上で実行する 6 つ以上のノード
  • ロボット - 4 コアの CPU と 16GB の RAM を搭載したマシン
  • SQL Server - 4 ソケット/16 コアの CPU (既定は 8 ソケット/16 コアの CPU) と 64GB の RAM を搭載したマシン

    注: 多数の同時接続が実行される環境での SQL Server の割り当ての競合を減らすには、同じサイズで作成された最適な数の tempdb データ ファイルを使用するようにしてください。

パフォーマンスを向上させるための Orchestrator の変更

このセクションでは、大規模運用環境でのパフォーマンスを向上させるために、Orchestrator の UiPathOrchestrator.dll.config ファイルに対して行える一連の調整について説明します。

Redis を有効化する

<appSettings>
  <add key="LoadBalancer.UseRedis" value="true"/>
  <add key="LoadBalancer.Redis.ConnectionString" value="your.redis.cache.windows.net:6379,password=***"/>
</appSettings><appSettings>
  <add key="LoadBalancer.UseRedis" value="true"/>
  <add key="LoadBalancer.Redis.ConnectionString" value="your.redis.cache.windows.net:6379,password=***"/>
</appSettings>

接続文字列で最大プール サイズに大きな値を指定する

<connectionStrings>
  <add name="Default" providerName="System.Data.SqlClient" connectionString="Data Source=<SQLServer>;Initial Catalog=<dbName>;User ID=<username>;Password=***;Max Pool Size=1000" />
</connectionStrings><connectionStrings>
  <add name="Default" providerName="System.Data.SqlClient" connectionString="Data Source=<SQLServer>;Initial Catalog=<dbName>;User ID=<username>;Password=***;Max Pool Size=1000" />
</connectionStrings>

Elasticsearch にロボットのログを書き込み、AsyncWrapper を使用する

  • 次のパラメーターを使用して Elasticsearch のログ ターゲットを追加または変更します。
    xml <nlog> <targets> <target name="robotElasticBuffer" xsi:type="AsyncWrapper" overflowAction="Grow" queueLimit="10000" batchSize="1000" timeToSleepBetweenBatches="1"> <target xsi:type="ElasticSearch" name="robotElastic" uri="elastic.example.com:9200" requireAuth="true" username="***" password="***" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,indexName" /> </target> </targets> </nlog>xml <nlog> <targets> <target name="robotElasticBuffer" xsi:type="AsyncWrapper" overflowAction="Grow" queueLimit="10000" batchSize="1000" timeToSleepBetweenBatches="1"> <target xsi:type="ElasticSearch" name="robotElastic" uri="elastic.example.com:9200" requireAuth="true" username="***" password="***" index="${event-properties:item=indexName}-${date:format=yyyy.MM}" documentType="logEvent" includeAllProperties="true" layout="${message}" excludedProperties="agentSessionId,tenantId,indexName" /> </target> </targets> </nlog>
  • 前述の例に示したターゲットにのみログを書き込むよう、ロボット ログ ルールを追加または変更します。これにより、既定のデータベース ターゲットが自動的に無効化されます。
    xml <nlog> <rules> <logger name="Robot.*" ruleName="primaryRobotLogsTarget" final="true" writeTo="robotElasticBuffer" /> </rules> </nlog>xml <nlog> <rules> <logger name="Robot.*" ruleName="primaryRobotLogsTarget" final="true" writeTo="robotElasticBuffer" /> </rules> </nlog>
  • ElasticSearch からログを読み取るよう Orchestrator を設定します。
    <appSettings>
       <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
    </appSettings><appSettings>
       <add key="Logs.RobotLogs.ReadTarget" value="robotElasticBuffer" />
    </appSettings>

高スループット ストレージを使用する

そのために、Azure BLOB ストレージを選択できます。

<appSettings>
  <add key="Storage.Type" value="Azure" />
  <add key="Storage.Location" value="DefaultEndpointsProtocol=https;AccountName=yourBlob;AccountKey=yourKey;EndpointSuffix=core.windows.net" />
</appSettings><appSettings>
  <add key="Storage.Type" value="Azure" />
  <add key="Storage.Location" value="DefaultEndpointsProtocol=https;AccountName=yourBlob;AccountKey=yourKey;EndpointSuffix=core.windows.net" />
</appSettings>

メンテナンス モードを無効化する

メンテナンス モードは、使用しない場合には無効化することができます。

<appSettings>
  <add key="MaintenanceMode.Enabled" value="false" />
</appSettings><appSettings>
  <add key="MaintenanceMode.Enabled" value="false" />
</appSettings>

アプリケーション設定のキャッシュ時間を増やす

Redis の呼び出しの回数を減らすいくつかのメモリ内キャッシュを使用するよう Orchestrator を設定できます。たとえば、キャッシュの有効期限が 30 分に設定されている場合、アプリケーション レベルの設定を変更しても、30 分経過するまで反映されない場合があります。

ここで設定する有効期限は許容される待機時間によっても異なりますが、たとえ 5 分間しかキャッシュされていなくてもパフォーマンスが大幅に向上します。

<appSettings>
  <add key="Caching.MultiTier[AbpApplicationSettingsCache]" value="Memory" />
  <add key="Caching.MultiTier[AbpApplicationSettingsCache].ExpiresAfter" value="0:30:00" />
  <add key="Caching.MultiTier[AbpTenantSettingsCache]" value="Memory"/>
  <add key="Caching.MultiTier[AbpTenantSettingsCache].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[AbpZeroTenantFeatures]" value="Memory"/>
  <add key="Caching.MultiTier[AbpZeroTenantFeatures].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[AbpZeroRolePermissions]" value="Memory"/>
  <add key="Caching.MultiTier[AbpZeroRolePermissions].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[LicenseKeys]" value="Memory"/>
  <add key="Caching.MultiTier[LicenseKeys].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[TenantLicense]" value="Memory"/>
  <add key="Caching.MultiTier[TenantLicense].ExpiresAfter" value="0:30:00"/>
</appSettings><appSettings>
  <add key="Caching.MultiTier[AbpApplicationSettingsCache]" value="Memory" />
  <add key="Caching.MultiTier[AbpApplicationSettingsCache].ExpiresAfter" value="0:30:00" />
  <add key="Caching.MultiTier[AbpTenantSettingsCache]" value="Memory"/>
  <add key="Caching.MultiTier[AbpTenantSettingsCache].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[AbpZeroTenantFeatures]" value="Memory"/>
  <add key="Caching.MultiTier[AbpZeroTenantFeatures].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[AbpZeroRolePermissions]" value="Memory"/>
  <add key="Caching.MultiTier[AbpZeroRolePermissions].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[LicenseKeys]" value="Memory"/>
  <add key="Caching.MultiTier[LicenseKeys].ExpiresAfter" value="0:30:00"/>
  <add key="Caching.MultiTier[TenantLicense]" value="Memory"/>
  <add key="Caching.MultiTier[TenantLicense].ExpiresAfter" value="0:30:00"/>
</appSettings>

MinWorkerThreads の値を増やす

MinWorkerThreads に大きな数値を設定すると、パフォーマンスの向上に役立ちます。
<appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings><appSettings>
  <add key="ThreadPool.MinWorkerThreads" value="50" />
</appSettings>

超高スループットを実現するよう Quartz を調整する

この手順は、トリガーの起動回数が非常に多い場合にのみ必要です (例: 1 分当たり 2,000 回など)。

<quartz>
  <add key="quartz.scheduler.batchTriggerAcquisitionMaxCount" value="15" />
  <add key="quartz.threadPool.threadCount" value="15" />
  <add key="quartz.jobStore.misfireThreshold" value="3600000" />
  <add key="quartz.jobStore.clusterCheckinInterval" value="60000" />
  <add key="quartz.jobStore.clustered" value="true" />
</quartz><quartz>
  <add key="quartz.scheduler.batchTriggerAcquisitionMaxCount" value="15" />
  <add key="quartz.threadPool.threadCount" value="15" />
  <add key="quartz.jobStore.misfireThreshold" value="3600000" />
  <add key="quartz.jobStore.clusterCheckinInterval" value="60000" />
  <add key="quartz.jobStore.clustered" value="true" />
</quartz>

監査で IP の DNS 解決を無効化する

企業ネットワークを使用していない場合や、監査で記録された IP の DNS 名を確認する必要がない場合は、解決を無効化できます。

<appSettings>
  <add key="Audit.UseDnsResolving" value="false" />
</appSettings><appSettings>
  <add key="Audit.UseDnsResolving" value="false" />
</appSettings>

グループ メンバーシップを素早く取得できるストラテジに切り替える

注: Directory.ActiveDirectory.GroupMembershipFetchStrategyDirectory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours は、レガシ Active Directory アダプターにのみ適用されます。これらの設定は、Active Directory が有効化されている Orchestrator のバージョンから v2021.10 以降にアップグレードした場合にのみ使用してください。
[identity].[Settings] テーブルで Directory.ActiveDirectory.GroupMembershipFetchStrategyTokenGroups に設定するには、以下を実行します。
SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.GroupMembershipFetchStrategy' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='TokenGroups' WHERE [Key]='Directory.ActiveDirectory.GroupMembershipFetchStrategy' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.GroupMembershipFetchStrategy', 'TokenGroups', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.GroupMembershipFetchStrategy' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='TokenGroups' WHERE [Key]='Directory.ActiveDirectory.GroupMembershipFetchStrategy' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.GroupMembershipFetchStrategy', 'TokenGroups', 1)
[identity].[Settings] テーブルで Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours を 4 時間に設定するには、以下を実行します。
SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='4' WHERE [Key]='Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours', '4', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='4' WHERE [Key]='Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.AuthorizationGroupsCacheExpirationHours', '4', 1)

Active Directory ドメイン キャッシュの有効期限を調整する

注: Directory.ActiveDirectory.CacheExpirationSeconds は、レガシー Active Directory アダプターにのみ適用されます。この設定は、Active Directory が有効化されている Orchestrator のバージョンから v2021.10 以降にアップグレードした場合にのみ使用してください。
Active Directory ドメイン キャッシュの有効期限を制御するには、[identity].[Settings] テーブルの Directory.ActiveDirectory.CacheExpirationSeconds の設定を使用します。この設定の既定値は 43200 秒 (12 時間) です。Active Directory ドメイン キャッシュを無効化するには、この設定を 0 にする必要があります。

この設定を 7 日に設定するには、以下を実行します。

SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='604800' WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.CacheExpirationSeconds', '604800', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='604800' WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.CacheExpirationSeconds', '604800', 1)

Active Directory ドメイン キャッシュを無効化するには、以下を実行します。

SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='0' WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.CacheExpirationSeconds', '0', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
IF @@ROWCOUNT>0
    UPDATE [identity].[Settings] SET [Value]='0' WHERE [Key]='Directory.ActiveDirectory.CacheExpirationSeconds' and [PartitionId]=1
ELSE
    INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.CacheExpirationSeconds', '0', 1)

Active Directory ドメインの読み込みパフォーマンスを向上させる

注: Directory.ActiveDirectory.DomainFilter は、レガシー Active Directory アダプターにのみ適用されます。この設定は、Active Directory が有効化されている Orchestrator のバージョンから v2021.10 以降にアップグレードした場合にのみ使用してください。

ドメイン フィルターを有効化するには、以下を実行します。

SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1
IF @@ROWCOUNT>0
UPDATE [identity].[Settings] SET [Value]='<comma separated list of domain FQDNs>' WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1
ELSE
INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.DomainFilter', '<comma separated list of domain FQDNs>', 1)SELECT * FROM [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1
IF @@ROWCOUNT>0
UPDATE [identity].[Settings] SET [Value]='<comma separated list of domain FQDNs>' WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1
ELSE
INSERT INTO [identity].[Settings] ([Key], [Value], [PartitionId]) VALUES ('Directory.ActiveDirectory.DomainFilter', '<comma separated list of domain FQDNs>', 1)

Active Directory ドメイン キャッシュを無効化するには、以下を使用します。

DELETE [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1DELETE [identity].[Settings] WHERE [Key]='Directory.ActiveDirectory.DomainFilter' and [PartitionId]=1

ロボットのライセンス変更イベントに対して SignalR を無効化する

パフォーマンスを大幅に向上させようとしているときに、ライセンス取得イベントが SignalR Redis のバックプレーンに大きな負荷をもたらしていることがあります。それを軽減するには、イベントを無効化します。そうすれば、UI のライセンスはリアルタイムで更新されなくなります。10 万台のロボットがある場合には、リアルタイムの画面の更新にはほとんど意味がありません。

<appSettings>
  <add key="Scalability.SignalR.Browser.RobotLicenseChangeEventEnabled" value="false" />
</appSettings><appSettings>
  <add key="Scalability.SignalR.Browser.RobotLicenseChangeEventEnabled" value="false" />
</appSettings>

NuGet パッケージのキャッシュを有効化する

この変更によって、パッケージの内容がサーバー側でキャッシュされるようになります。また、ファイル共有がパッケージのダウンロードのスループットに追いつかない場合にも役立ちます。

<<add key="NuGet.Caching.Enabled" value="true" />
<add key="NuGet.Caching.MaxCacheSize" value="104857600" /><!-- (100 MiB) -->
<add key="NuGet.Caching.MaxPackageSize" value="4194304" /><!-- (4 MiB) -->
<add key="NuGet.Caching.AbsoluteExpirationRelativeToNow" value="00:10:00" /><!-- (1 min) --><<add key="NuGet.Caching.Enabled" value="true" />
<add key="NuGet.Caching.MaxCacheSize" value="104857600" /><!-- (100 MiB) -->
<add key="NuGet.Caching.MaxPackageSize" value="4194304" /><!-- (4 MiB) -->
<add key="NuGet.Caching.AbsoluteExpirationRelativeToNow" value="00:10:00" /><!-- (1 min) -->
この機能を有効化するには、NuGet.Caching.Enabled の設定を追加するだけで十分です。上記の例に表示されている残りの設定は、既定値を変更する場合にのみ調整する必要があります (例: キャッシュまたはパッケージのサイズ制限のサイズを大きくする)。

Azure の PaaS デプロイでローカル キャッシュを有効化する

Orchestrator App Service の運用環境スロットで、スロット固定として次の設定をします。

WEBSITE_LOCAL_CACHE_OPTION = Always
WEBSITE_LOCAL_CACHE_SIZEINMB = 1000WEBSITE_LOCAL_CACHE_OPTION = Always
WEBSITE_LOCAL_CACHE_SIZEINMB = 1000

Azure の PaaS デプロイでスロット ウォームアップを設定する

Orchestrator App Service の運用環境スロットとホットスワップ デプロイ スロットの両方で、次の設定をします。これにより、デプロイ時にアプリケーションがウォームアップされ、コールド アプリにトラフィックをリダイレクトすることで生じるパフォーマンス ヒットを最小限に抑えることができます。

WEBSITE_SWAP_WARMUP_PING_PATH = /api/status
WEBSITE_SWAP_WARMUP_PING_STATUSES = 200WEBSITE_SWAP_WARMUP_PING_PATH = /api/status
WEBSITE_SWAP_WARMUP_PING_STATUSES = 200

Azure の PaaS デプロイで Azure SignalR Service を使用する

Azure のデプロイで Azure SignalR Service を使用すると、Web サーバーに対する負荷を大幅に減らすことができます。この設定について詳しくは、「Scalability.AzureSignalR.ConnectionString」をご覧ください。

<appSettings>
  <add key="LoadBalancer.UseRedis" value="true"/>
  <add key="Scalability.AzureSignalR.ConnectionString" value="**myAzureSignalRConnectionString" />
</appSettings><appSettings>
  <add key="LoadBalancer.UseRedis" value="true"/>
  <add key="Scalability.AzureSignalR.ConnectionString" value="**myAzureSignalRConnectionString" />
</appSettings>

SubmitLogs エンドポイントのフラッシュの間隔とサイズを調整する

この変更により、SubmitLogs API エンドポイントを呼び出す前に、Executor プロセスからログを収集するためのタイムフレーム バッチ ウィンドウを制御できるようになります。UiPath.Orchestrator.dll.config で以下の設定を有効化し、必要に応じて設定します。
  • RobotsLogs.Flush.Interval

    <add key="RobotsLogs.Flush.Interval" value="0" /><add key="RobotsLogs.Flush.Interval" value="0" />

この設定の詳細については、RobotsLogs.Flush.Interval をご覧ください。

  • RobotsLogs.Flush.BatchSize

    <add key="RobotsLogs.Flush.BatchSize" value="100" /><add key="RobotsLogs.Flush.BatchSize" value="100" />

この設定の詳細については、RobotsLogs.Flush.BatchSize をご覧ください。

パフォーマンスを向上させるための Identity Server の変更

Identity Server の AppSettings.Production.json ファイルに対する以下の変更により、大規模運用環境におけるパフォーマンスが向上します。

接続文字列で最大プール サイズに大きな値を指定する

"ConnectionStrings": {
    "DefaultConnection": "Data Source=dbServer;Initial Catalog=UiPath_is;User ID=username;Password=****;Max Pool Size=1000"
  }"ConnectionStrings": {
    "DefaultConnection": "Data Source=dbServer;Initial Catalog=UiPath_is;User ID=username;Password=****;Max Pool Size=1000"
  }

Redis を有効化する

"LoadBalancerSettings": {
      "RedisConnectionString": "yourRedis:6379,password=****",
      "UseRedis": "true"
    }"LoadBalancerSettings": {
      "RedisConnectionString": "yourRedis:6379,password=****",
      "UseRedis": "true"
    }

パフォーマンスを向上させるための UI 設定の変更

Orchestrator の UI により、以下の手順を実行して、大規模運用環境におけるパフォーマンスを向上させることができます。

  • 個人用ワークスペースの無効化
  • ロボット ユーザーに対する [Web ログインを許可] の無効化
  • ロボット ユーザーに対するロール Robot および Automation User の割り当て

Was this page helpful?

サポートを受ける
RPA について学ぶ - オートメーション コース
UiPath コミュニティ フォーラム
UiPath ロゴ (白)
信頼とセキュリティ
© 2005-2024 UiPath. All rights reserved.