RoboServerの環境設定

フォローする

安定して実行できる環境を得るためには、RoboServerの初期パラメータをいくつか調整する必要があります。次の設定項目について見てみましょう。

  • RoboServerのインスタンス数
  • メモリ割当て
  • 同時に稼働するロボット
  • メモリ過負荷の自動検出

RoboServerはOracleのJava仮想マシン(JVM)上で実行されます。

JVMはお手持ちのハードウェア上に搭載されているオペレーティングシステム(OS)上で動作します。

JVMとOSはパッチにより修正されるほか、パフォーマンス改善を目的としてハードウェア・アーキテクチャの変更や更新が行われています。

そのため、RoboServerのパフォーマンスについての一般的なガイドラインを説明しますが、実際にパフォーマンスを最適化できているか確認するためには、テストを行っていただくしかありません。

通常、RoboServerを2インスタンス同時に起動することで、パフォーマンスは多少改善します。

JVMにはガーベッジコレクション(GC)というメモリ管理機能が備わっています。

たいていのハードウェアでは、GCの実行中には一つのCPUコアしかアクティブ状態になりません。

つまり、クアッドコアCPUの場合その75%が(残りの3つは)アイドル状態となっているのです。

RoboServerを2インスタンス起動すれば、片方でGCが行われていても、もう片方はCPUをフルに使うことができます。

1つのRoboServer上で同時に稼働できるロボットの上限は、使用可能なCPUの量と、どれだけ早くRoboServerが処理すべきデータを取得できるかで決まります。

同時に稼働するロボットの数は、Management Consoleのcluster settings(クラスタ設定) で設定できます。

重いウェブサイト上で動作するロボットは、軽いウェブサイト上で動作するロボットに比べて、ほとんどCPUを消費しません。

この理由は次の通りです。あるプログラムで消費されるCPUの量は、次の式で表すことができます。

CPU (core)% = 1 – 待ち時間/総実行時間

あるロボットは実行に20秒かかるものの、内15秒はウェブサイトの反応待ちに費やしており実際の実行時間は5秒だけとすると、この20秒間に平均で1CPUコアの25%が消費されることになります。

ロボット内の各ステップは順番に実行されますので、1つのロボットは一度に1CPUしか使用することができません。

最近のCPUのほとんどはマルチコアとなっていますので、クアッドコアCPUの場合、総実行時間が20秒(内待ち時間が15秒)のロボットは全CPUのおよそ6%しか消費していないことになります。

初期設定では、1つのRoboServerは最大で20体のロボットを同時に実行するようになっています。

同時に稼働するロボットの数は、Management Consoleのcluster settings(クラスタ設定) で設定できます。

もし全てのロボットがCPUの6%しか消費しないのであれば、同時に16〜17体のロボットを実行すればCPUをフル活用できます。

CPUを6%使用するロボットを33体同時に起動すると、RoboServerに過負荷をかけることになります。

使用可能なCPUの量は一定ですので、各ロボットが終了するまでの時間は2倍になります。

ロボットのロジックや対象となるウェブサイトにもよりますが、実際のロボットのCPU使用率は1コアあたり5〜95%となっています。

そのためロボットの最大同時稼働数を正確に計算することは難しく、最適な値を確かめるには実際に負荷テストを行い、RoboServerのCPU使用率だけでなく、負荷が増えた場合のロボットの実行時間も確認していただかなければいけません。

またメモリ総量も、RoboServer上で同時に稼働できるロボット数に影響します。

ロボットが消費するメモリは数MBから数百MBまでと様々です。初期設定ではRoboServerには1024MBのメモリが割当てられていますが、これは実際にロボットを20体同時に稼働する場合などには十分とは言えないでしょう。

メモリ割当ての設定については、 RoboServerに割り当てるヒープ領域の容量を増加させる をご覧ください。

RoboServerに十分なメモリが割当てられていない場合、メモリ不足エラーが起きてクラッシュする可能性があります。

メモリを十分に割当てられているか確認する一番簡単な方法は、負荷テストの際にメモリ使用率を測定することです。

RoboServerに2048MBのメモリが割当てられた場合でも、JVMはその全てをアクティブに割当てるわけではなく、OSが使用しないように確保しています(このため、32ビット版Windowsで1200MB以上のメモリを割当てることはできません)。

一度割当てられたメモリがJVMに消費され始めると、そのメモリをOSが使用することはできません。

最適なメモリ割当て量を知るには、CPU使用率が100%となるまで何回も負荷テストを行う必要があります。

テストを行う度に、確保されているメモリの内で実際にJVM(java.exeプロセス)によって使用されたメモリの量を確認してください。

もし1024MB(初期設定)全てが使用されている場合、メモリの割当て量を(通常は2倍に)増やして再テストを行ってください。

どこかでJVMは確保されているメモリ全てを使い切れなくなります。

その時使用していたメモリ量が実際に必要なメモリ量ですので、RoboServerを設定する際にこの値を使用してください。

メモリ不足に陥るとRoboServerはクラッシュしてしまいますので、RoboServerにはこれを回避する機能が備わっています。

新しくロボットを起動する前に、RoboServerはメモリ使用率を確認します。

もしメモリ使用率が80%を超えていれば、RoboServerはロボットを起動せずにキューに登録します。

これによって、メモリ割当ての設定が間違っていても、RoboServerがクラッシュする可能性は大幅に減少するのです。

この仕組みは、80%メモリ閾値と呼ばれています。

この閾値は、システムプロパティのkapow.memoryThreshold=80から変更することができます。

参考:http://help.kapowtech.com/9.3/topic/doc/rs/productionConfiguration.html

関連ナレッジ:GCログの取得について

 

0人中0人がこの記事が役に立ったと言っています

コメント

0件のコメント

ログインしてコメントを残してください。