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"