Amazon EC2 (Asia Pacific 東京)でm1.large を利用して、Cassandra 0.7.4のストレステストを試す。



前回、マイクロ インスタンスを利用して、Cassandra 0.7.4のストレステストを試してみました。あまり期待した結果がでなかった
為、今回は、ラージ インスタンスで試してみたいと思います。スモール インスタンスも検討したのですが、32bitしか
サポートしていなかった為、64bitサポートがあるラージ インスタンスにしてみました。
 

前回の補足で、swap領域を追加してみる

swap領域が無かった為、物理メモリの上限を超えたあたりで、ストレステストのプログラムをkillされて
しまったが、swap領域を新たに確保し、t1.microとm1.largeでストレステストを実施してみた。

m1.largeにおいて、確保したswap領域は、以下の通りです。t1.microに関しては、1G程増やして
試してみました。

 $dd if=/dev/zero of=/swap bs=1G count=2
  2+0 records in
  2+0 records out
  2147483648 bytes (2.1 GB) copied, 5.03326 seconds, 427 MB/s
  $mkswap /swap
    Setting up swapspace version 1, size = 2147479 kB
  $swapon /swap
  $swapon -s
    Filename                                Type            Size    Used    Priority
    /swap                                   file            2097144 0       -1
  $cat /proc/swaps
    Filename                                Type            Size    Used    Priority
    /swap                                   file            2097144 0       -1
  $free -m
                  total       used       free     shared    buffers     cached
    Mem:          7680       2315       5364          0          5       2082
    -/+ buffers/cache:        226       7453
    Swap:         2047          0       2047

 
ストレステスト実施中のOSリソースの確認は、sarコマンドで行いました。

m1.largeにおける実施内容は、下記のような感じでした。t1.microでは、OOM Killerは
起こらなかった物のstealが常に100%近くなり、ストレステスト自体がなかなか終わりませんでした。

 17時08分54秒       CPU     %user     %nice   %system   %iowait    %steal     %idle
 17時08分55秒       all      2.99      0.00      0.50      0.00      0.50     96.02
 17時08分56秒       all      1.01      0.00      0.00      0.00      0.00     98.99
 17時08分57秒       all      1.00      0.00      0.50      0.00      0.00     98.51
 17時08分58秒       all      5.05      0.00      0.00      0.00      0.00     94.95
 17時08分59秒       all      0.51      0.00      0.00      0.00      0.00     99.49
 17時09分00秒       all      0.99      0.00      0.00      0.00      0.00     99.01
 17時09分01秒       all      0.49      0.00      0.49      0.00      0.00     99.01
 17時09分02秒       all      0.50      0.00      0.00      0.00      0.50     99.01
 17時09分03秒       all      0.51      0.00      0.00      0.00      0.00     99.49
 17時09分04秒       all      0.49      0.00      0.49      0.00      0.00     99.01
 
 17時09分26秒       all      0.00      0.00      0.00      0.00      0.00    100.00
 17時09分27秒       all      0.00      0.00      0.00      0.00      0.00    100.00
 17時09分28秒       all      0.50      0.00      0.00      0.00      0.00     99.50
 17時09分29秒       all      5.00      0.00      0.00      0.00      0.00     95.00
 17時09分30秒       all      1.00      0.00      0.50      0.00      0.00     98.51
 17時09分31秒       all      3.43      0.00      0.49      0.00      0.00     96.08
 17時09分32秒       all     11.62      0.00      0.00      0.00      0.51     87.88
 17時09分33秒       all      0.50      0.00      0.00      0.00      0.00     99.50
 17時09分34秒       all      1.99      0.00      0.50      0.00      0.00     97.51

 

Cassandra 0.7.4のストレステストプログラムのコンパイル

apache-cassandra-0.7.4-srcをダウンロードし展開すると、「contrib/stress」というディレクトリがあります。
この中に、javaで書かれたストレスプログラムがあります。ちなみに「contrib/py_stress」というPython版も
あります。

javaとantが利用できることを確認します。

 $java -version
  java version "1.6.0_24"
  Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
  Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode)
 $ant -version
    Apache Ant(TM) version 1.8.2 compiled on December 20 2010

 
antタスクを実行します。

 ant
  Buildfile: /usr/local/apache-cassandra-0.7.4-src/contrib/stress/build.xml
  
  init:
   
  build:
     [javac] /usr/local/apache-cassandra-0.7.4-src/contrib/stress/build.xml:34: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
  
  BUILD SUCCESSFUL
  Total time: 0 seconds

 
コンパイルが成功したらjarファイルを作成します。

 ant jar
  Buildfile: /usr/local/apache-cassandra-0.7.4-src/contrib/stress/build.xml
  
  init:
  
  build:
     [javac] /usr/local/apache-cassandra-0.7.4-src/contrib/stress/build.xml:34: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
  
  jar:
  
  BUILD SUCCESSFUL
  Total time: 0 seconds
 
 ls ./build
  classes  stress.jar

 
buildディレクト配下に、stress.jarができました。
stress.jarをクラスパスに設定してストレステストプログラムを実行します。

 contrib/stress/bin/stress -d xxx.xxx.xxx.xxx
 や
 contrib/stress/bin/stress -d xxx.xxx.xxx.xxx -o read --num-keys=500000
 contrib/stress/bin/stress -d 59.106.185.203 -n 5000000

といった使い方ができるみたいです。