- マシン
- HP Proliant ML115サーバー
- 搭載メモリ
- 7GB(1GB + 2GBx3)
- OS
- Ubuntu11.04
- Apache Cassandra
- 0.7.5
起動しようとすると以下のようなエラーが出てサーバーが立ち上がりません。
$ bin/cassandra -f Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
ネットブック上のUbuntu11.04では起動したのに、バグかと思いました。
bin/cassandraを調べてみる
bin/cassandraを調べてみると121行目あたりにJavaVMを起動する部分があったのでどんなコマンドを発行しているのかちょっといじって確認してみました。
# The cassandra-foreground option will tell CassandraDaemon not # to close stdout/stderr, but it's up to us not to background. if [ "x$foreground" != "x" ]; then cassandra_parms="$cassandra_parms -Dcassandra-foreground=yes" # [debug] ここに注目 exec $JAVA $JVM_OPTS $cassandra_parms -cp $CLASSPATH $props $class # Startup CassandraDaemon, background it, and write the pid. else exec $JAVA $JVM_OPTS $cassandra_parms -cp $CLASSPATH $props $class <&- & [ ! -z $pidpath ] && printf "%d" $! > $pidpath fi
出力結果
なんじゃこりゃーって感じですね。
/usr/bin/java -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms3525M -Xmx3525M -Xmn100M -XX:+HeapDumpOnOutOfMemoryError -Xss128k -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote.port=8080 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dlog4j.configuration=log4j-server.properties -Dlog4j.defaultInitOverride=true -Dcassandra-foreground=yes -cp bin/../conf:bin/../build/classes:bin/../lib/antlr-3.1.3.jar:bin/../lib/apache-cassandra-0.7.5.jar:bin/../lib/avro-1.4.0-fixes.jar:bin/../lib/avro-1.4.0-sources-fixes.jar:bin/../lib/commons-cli-1.1.jar:bin/../lib/commons-codec-1.2.jar:bin/../lib/commons-collections-3.2.1.jar:bin/../lib/commons-lang-2.4.jar:bin/../lib/concurrentlinkedhashmap-lru-1.1.jar:bin/../lib/guava-r05.jar:bin/../lib/high-scale-lib.jar:bin/../lib/jackson-core-asl-1.4.0.jar:bin/../lib/jackson-mapper-asl-1.4.0.jar:bin/../lib/jetty-6.1.21.jar:bin/../lib/jetty-util-6.1.21.jar:bin/../lib/jline-0.9.94.jar:bin/../lib/json-simple-1.1.jar:bin/../lib/jug-2.0.0.jar:bin/../lib/libthrift-0.5.jar:bin/../lib/log4j-1.2.16.jar:bin/../lib/servlet-api-2.5-20081211.jar:bin/../lib/slf4j-api-1.6.1.jar:bin/../lib/slf4j-log4j12-1.6.1.jar:bin/../lib/snakeyaml-1.6.jar org.apache.cassandra.thrift.CassandraDaemon
-Xms3525M -Xmx3525M
の設定でJavaVMが起動されているのでこのあたりが怪しいです。
conf/cassandra-env.sh
しらみつぶしにbin/cassandraから参照されているファイルを調べていくと、どうもconf/cassandra-evn.shの70行目あたりが確保するヒープメモリを設定する部分のようです。
# Override these to set the amount of memory to allocate to the JVM at # start-up. For production use you almost certainly want to adjust # this for your environment. MAX_HEAP_SIZE is the total amount of # memory dedicated to the Java heap; HEAP_NEWSIZE refers to the size # of the young generation. Both MAX_HEAP_SIZE and HEAP_NEWSIZE should # be either set or not (if you set one, set the other). # # The main trade-off for the young generation is that the larger it # is, the longer GC pause times will be. The shorter it is, the more # expensive GC will be (usually). # # The example HEAP_NEWSIZE assumes a modern 8-core+ machine for decent pause # times. If in doubt, and if you do not particularly want to tweak, go with # 100 MB per physical CPU core. #MAX_HEAP_SIZE="4G" -> 1024M #HEAP_NEWSIZE="800M" -> 128M if [ "x$MAX_HEAP_SIZE" = "x" ] && [ "x$HEAP_NEWSIZE" = "x" ]; then calculate_heap_sizes else if [ "x$MAX_HEAP_SIZE" = "x" ] || [ "x$HEAP_NEWSIZE" = "x" ]; then echo "please set or unset MAX_HEAP_SIZE and HEAP_NEWSIZE in pairs (see cassandra-env.sh)" exit 1 fi fi
この行より前の部分でマシンの搭載メモリからJVMに渡すヒープサイズを自動計算していました。
そこで、MAX_HEAP_SIZEとHEAP_NEWSIZEをオーバーライドすることで手動設定できるようになるようです。私は以下のように設定しました。
MAX_HEAP_SIZE="1024M" HEAP_NEWSIZE="128M"
こうしたらちゃんと起動できました。よかったです。
関連記事
投稿者紹介
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。
最近のエントリ
- レポート2019.10.28ユニキャストレストランを開催しました🍳
- レポート2019.08.29社内研修ワークショップ~マシュマロ・チャレンジ~
- レポート2019.08.06Computex/InnoVEX 出展者・通訳として参加してきました。
- レポート2018.06.12Computex 2018 レポート