2013年1月1日火曜日

Cassandra をVPS環境(最小スペック)で試してみる

Cassandra のシステム要件は、以下のとおりです。
  • メモリ:1GB以上を推奨
  • CPU:最低限度の指定は無し(ただし大部分の負荷はCPU依存)
  • ディスク:インストール後のサイズは 56MB(ビッグデータを扱うならば、もちろん潤沢に)
http://wiki.apache.org/cassandra/CassandraHardware_JP

DTI の ServersMan@VPS(Entryプラン)の場合、利用できるスペックは以下のとおりです。
  • 保証メモリ:512MB
  • 最大メモリ:1GB
  • HDD:10GB

もちろんメモリサイズが Cassandra のシステム要件を満たさない。だが試動するくらいなら何とかなるだろうか・・・

Cassandra における最大ヒープサイズのデフォルトサイズは、メモリ総量を元に以下のとおり定義されています。
  • 2GB以下では、メモリ総量/2
  • 2GB~4GBでは、1GB
  • 4GB~32GBでは、メモリ総量/4
  • 32GB以上では、8GB

では VPS ならば保証/最大メモリのどちらがメモリサイズの判断材料になるのか?
ただメモリ使用量を保証メモリ以内に収めないと異常終了します。

# free -m
             total       used       free     shared    buffers     cached
Mem:          1024        108        915          0          0          0
-/+ buffers/cache:        108        915
Swap:            0          0          0

total メモリが 1G となっており、VPS のスペックのうち最大メモリサイズがメモリ総量となっています。これだと最大ヒープサイズはメモリ総量の半分 512M となります。デフォルト設定のまま起動してみると、

# $CASSANDRA_HOME/bin/cassandra -f
xss = -ea -javaagent:/usr/local/apache-cassandra-1.1.8/lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms512M -Xmx512M -Xmn128M -XX:+HeapDumpOnOutOfMemoryError -Xss180k
(中略)
ERROR 23:29:25,767 Exception encountered during startup
java.lang.OutOfMemoryError: unable to create new native thread


やはり駄目でした。
Cassandra起動中のメモリサイズを追跡してみると、使用中のメモリは一時的に 578MB 増加しています。メモリサイズが全然足りないですね。

今回使用した環境は以下のとおり
  • DTI の ServersMan@VPS(Entryプラン)
  • CentOS 6.3(64bit)
  • Java 1.7.0_09
  • Apache Cassandra 1.1.8


<参考資料>
最大ヒープサイズの変更は、$CASSANDRA_HOME/conf/cassandra-env.sh で設定します。
※ただ、通常はこの設定を変更する必要は無いはずです。
MAX_HEAP_SIZE="4G"
HEAP_NEWSIZE="800M"