ロボットを安定して実行できる環境を得るためには、RSの初期パラメータをいくつか調整する必要があります。下記の4点の設定項目について説明します。
・RSのインスタンス数
・同時に稼働するロボット数
・メモリ割当て
・メモリ過負荷の自動検出
■RSのインスタンス数
RSはOracleのJava仮想マシン(JVM)上で実行され、JVMはハードウェア上に搭載されているオペレーティングシステム(OS)上で動作します。
JVMとOSはパッチにより修正されるほか、パフォーマンス改善を目的としてハードウェア・アーキテクチャの変更や更新が行われています。
下記はRSのパフォーマンスについての一般的なガイドラインです。
※実際にパフォーマンスを最適化できているか確認するためには、テストを行う必要があります。
RSを2インスタンス同時に起動することで、パフォーマンスは多少改善します。
1つのRS上で同時に稼働できるロボットの上限は、使用可能なCPUの量と、どれだけ早くRSが処理すべきデータを取得できるかで決まります。
※同時に稼働するロボットの数は、MCの「クラスタ設定(Cluster settings)) で設定できます。
重いWebページを処理するロボットは、軽いWebページを処理するロボットに比べて、ほとんどCPUを消費しません。なお、消費されるCPUの量は、次の式で表すことができます。
CPU (core)% = 1 – 待ち時間/総実行時間
下記の条件の場合、消費される1CPUのパーセンテージは25%になります。
・ロボットの実行時間は20秒
・Webページの反応待ちに費やされる時間は15秒
ロボット内の各ステップは順番に実行されるため、1つのロボットは一度に1CPUしか使用することができません。クアッドコアCPUの場合、総実行時間が20秒(内待ち時間が15秒)のロボットは全CPUのおよそ6%しか消費していないことになります。
■同時稼働するロボット数
初期設定では、1つのRSは最大で20体のロボットを同時に実行するようになっており、もし全てのロボットがCPUの6%しか消費しないのであれば、同時に16〜17体のロボットを実行すればCPUをフル活用できます。
※同時に稼働するロボットの数は、MCの「クラスタ設定(Cluster settings)」で設定できます。
仮にCPUを6%使用するロボットを33体同時に起動すると、使用可能なCPUの量は一定なので、RSに過負荷をかけることになり、各ロボットが終了するまでの時間は2倍になります。
ロボットのロジックや処理するWebページにもよりますが、実際のロボットのCPU使用率は1コアあたり5〜95%となっています。
そのためロボットの最大同時稼働数を正確に計算することは難しく、最適な値を確かめるには実際に負荷テストを行い、RSのCPU使用率だけでなく、負荷が増えた場合のロボットの実行時間も確認していただく必要があります。
■メモリ割り当て
メモリ総量も、RS上で同時に稼働できるロボット数に影響します。
ロボットが消費するメモリは数MBから数百MBまでと様々です。初期設定ではRSには64Bit環境の場合2048MB、32Bit環境の場合900MBのメモリが割当てられていますが、これは実際にロボットを20体同時に稼働する場合などには十分とは言えません。
メモリ割当ての設定については、『RoboServerに割り当てるJavaヒープ領域の容量を変更する方法』を参照してください。
RSに十分なメモリが割当てられていない場合、メモリ不足エラーが起きてクラッシュする可能性があります。
メモリを十分に割当てられているか確認する一番簡単な方法は、負荷テストの際にメモリ使用率を測定することです。
RSに2048MBのメモリが割当てられた場合でも、JVMはその全てをアクティブに割当てるわけではなく、OSが使用しないように確保しています(このため、32ビット版Windowsでは1200MB以上のメモリを割当てることはできません)。
一度割当てられたメモリがJVMに消費され始めると、そのメモリをOSが使用することはできません。
最適なメモリ割当て量を把握するには、CPU使用率が100%となるまで何回も負荷テストを行う必要があります。
テストを行う度に、確保されているメモリの内、実際にJVM(java.exeプロセス)によって使用されたメモリの量を確認してください。
初期設定されているメモリ全てが使用されている場合は、メモリの割当て量を(通常は2倍)増やして再テストを行ってください。
いずれJVMは確保されているメモリ全てを使い切れなくなります。
その時使用していたメモリ量が実際に必要なメモリ量ですので、RSを設定する際にこの値を使用してください。
■メモリ過負荷の自動検出
メモリ不足に陥るとRSはクラッシュしてしまうため、RSにはこれを回避する機能が備わっています。
新しくロボットを起動する前に、RSはメモリ使用率を確認します。
もしメモリ使用率が80%を超えていれば、RSはロボットを起動せずにキューに登録します。
これによって、メモリ割当ての設定が間違っていても、RSがクラッシュする可能性は大幅に減少します。
ロボットがキューに登録されたかはMCの「管理(Admin)」タブ>「RoboServer」タブの「制限を超過」項目を確認してください。