
Cassandra kann nicht gestartet werden, wenn /tmp
auf eingestellt ist noexec
, was heutzutage so ziemlich die Standardeinstellung ist:
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]
Wenn ich die noexec
Flagge von der /var/tmp
Halterung entferneKassandrastartet ordnungsgemäß. Ich habe verschiedene Methoden ausprobiert, um den Speicherort des temporären Verzeichnisses in der cassandra-env.sh
Datei zu ändern:
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"
Ich habe diese natürlich nicht alle auf einmal verwendet. Dies sind Lösungen, die ich im Internet gefunden habe, aber keine scheint zu funktionieren. Ich habe sogar versucht, TMPDIR
am Anfang der cassandra-env.sh
Datei zu exportieren, aber ohne Erfolg. Es schlägt immer mit derselben Meldung fehl.
/tmp
Ich denke, es ist aus Sicherheitsgründen keine gute Idee, das Flag „noexec“ wegzulassen . Mir fehlt hier offensichtlich etwas Grundlegendes. Wie stelle ich das temporäre Verzeichnis /home/cassandra/tmp
oder etwas Ähnliches ein?
Antwort1
Ah, sieht aus wiebeideOptionen müssen in der cassandra-env.sh
Datei vorhanden sein:
JVM_OPTS="$JVM_OPTS -Djna.tmpdir=/home/cassandra/tmp"
JVM_OPTS="$JVM_OPTS -Djava.io.tmpdir=/home/cassandra/tmp"
Antwort2
Ich musste der Datei auch eine TMPDIR-Umgebungsvariable hinzufügen cassandra-env.sh
. Beispiel:
export TMPDIR=/home/cassandra/tmp