/tmp
がnoexec
として設定されている場合、Cassandraは起動に失敗します。これは、最近ではほとんどデフォルトです。
Java.lang.NoClassDefFoundError: Could not initialize class com.Sun.jna.Native
at org.Apache.cassandra.utils.memory.MemoryUtil.allocate(MemoryUtil.Java:82) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.util.Memory.<init>(Memory.Java:74) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.util.Memory.allocate(Memory.Java:97) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.sstable.IndexSummary$IndexSummarySerializer.deserialize(IndexSummary.Java:323) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.sstable.format.SSTableReader.loadSummary(SSTableReader.Java:836) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.sstable.format.SSTableReader.load(SSTableReader.Java:692) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.sstable.format.SSTableReader.load(SSTableReader.Java:664) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.Java:458) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.Java:363) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at org.Apache.cassandra.io.sstable.format.SSTableReader$4.run(SSTableReader.Java:501) ~[Apache-cassandra-2.2.2.jar:2.2.2]
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511) ~[na:1.8.0_102]
at Java.util.concurrent.FutureTask.run(FutureTask.Java:266) ~[na:1.8.0_102]
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142) ~[na:1.8.0_102]
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617) [na:1.8.0_102]
at Java.lang.Thread.run(Thread.Java:745) [na:1.8.0_102]
/var/tmp
マウントからnoexec
フラグを削除すると、Cassandraが正しく起動します。 cassandra-env.sh
ファイル内のtmpdirの場所を変更するためにいくつかの方法を試しました。
JVM_OPTS="$JVM_OPTS -Djna.tmpdir=/home/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Dorg.xerial.snappy.tempdir=/home/cassandra/tmp"
もちろん、これらすべてを一度に使用したことはありません。これらはインターネットで見つけたソリューションですが、どれも機能していないようです。 cassandra-env.sh
ファイルの先頭でTMPDIR
をエクスポートしようとしましたが、役に立ちませんでした。常に同じメッセージで失敗します。
セキュリティ面で、noexecフラグなしで/tmp
を残すのは悪い考えだと思います。私は明らかにここで基本的な何かが欠けています。 tmpdirを/home/cassandra/tmp
などに設定するにはどうすればよいですか?
ああ、次のようになります両方オプションはcassandra-env.sh
ファイルに存在する必要があります。
JVM_OPTS="$JVM_OPTS -Djna.tmpdir=/home/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/cassandra/tmp"