无法使用bin/cassandra启动Cassandra数据库

23

我有一个安装了cassandra 1.1.3(tarball安装)的Ubuntu 12.04系统,但在尝试启动cassandra时,出现以下错误:

user@ubuntu:~/apache-cassandra-1.1.3/bin$ sudo ./cassandra -f
xss =  -ea -javaagent:./../lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms4G -Xmx4G -Xmn800M -XX:    +HeapDumpOnOutOfMemoryError -Xss128k
user@ubuntu:~/apache-cassandra-1.1.3/bin$ 

根据Cassandra文档,输出结果与预期不符:
The service should start in the foreground and log gratuitously to 
standard-out. Assuming you don't see messages with scary words like  
"error", or "fatal", or anything that looks like a Java stack trace,  
then chances are you've succeeded.

那么,问题是什么?

你的数据库中是否包含任何数据?还是您正在进行全新的安装? - Aaron
1
这是一个新的安装,之前我使用apt-get安装了Ubuntu打包的Cassandra 1.0,它过去可以无问题地启动。无论如何,两天后,我手动删除文件夹卸载了Cassandra 1.0,并安装了Cassandra 1.1的tarball(按照官方网站的说明进行)。 - Ababneh A
更正:我按照 README 文件中的说明操作,而不是网站上的。 - Ababneh A
你的cassandra.yaml文件是否保持不变?它是否引用了正确的data_file_directories?如果是这样,请尝试将其指向一个新的(空)目录,看看是否可以启动。 - Aaron
我检查了cassandra.yaml文件,发现它引用了一个旧目录,该目录已不存在(可能与以前的安装有关)。我设置了以下内容:data_file_directories: /db/cassandra/data,commitlog_directory: /db/cassandra/commitlog,saved_caches_directory: /db/cassandra/commitlog。我尝试重新启动,但是cassandra没有启动,并且终端返回了相同的错误。 - Ababneh A
还影响在 Red Hat Enterprise Linux 6 上运行的 Cassandra 1.2.2。 - Raedwald
4个回答

28

问题可能是由使用OpenJDK引起的,如Cassandra bug报告中所述,但是,请参阅此处的评论,了解在Sun/Oracle和其他JVM上发生此问题的情况:

如果您无法安装Oracle JVM,则尝试在conf/cassandra-env.sh配置脚本中更改堆栈大小。查找以下部分(大约在第185行左右),并将-Xss180k更改为更高的值。

if [ "`uname`" = "Linux" ] ; then
  # reduce the per-thread stack size to minimize the impact of Thrift
  # thread-per-client.  (Best practice is for client connections to
  # be pooled anyway.) Only do so on Linux where it is known to be
  # supported.
  # u34 and greater need 180k
  JVM_OPTS="$JVM_OPTS -Xss180k"
fi
echo "xss = $JVM_OPTS"

我曾在Rackspace和Amazon的Ubuntu服务器上测试安装,成功地使用了280k。

根据下面评论中的报告,建议逐步增加堆栈大小20k,从-Xss200k开始,直到Cassandra能够正常启动。请注意,也可以删除此选项并使用每个线程的默认堆栈大小,但要注意这可能会对内存消耗产生影响。


3
在Red Hat 6上,使用256k的堆栈大小可以解决这个问题。 - Raedwald
1
我在使用Sun 1.7.0_15 JDK时也遇到了这个问题,通过设置“-Xss280k”来解决它。因此,这个问题不仅限于OpenJDK。 - Josh Glover
我在Amazon Linux 64位AMI(OpenJDK 1.6)上成功运行了210k。 - delitescere
280k 在 Java 版本 "1.6.0_27" 上为我修复了这个问题。 OpenJDK 运行时环境(IcedTea6 1.12.5)(6b27-1.12.5-0ubuntu0.12.04.1) - Steve Swinsburg
2
谢谢你的帮助。我将它设置为280k和300k,但仍然出现相同的错误。我应该尝试多高的值?我正在使用Oracle JDK。 - AtharvaI

4

这很可能是由于在Ubuntu/Debian下使用OpenJDK 1.6运行引起的,会导致分段错误。由于shell脚本执行进程的方式,分段错误被隐藏了。您可以通过修改$CASSANDRA_HOME/bin/cassandra进行测试:

将以下行更改为:

exec $NUMACTL "$JAVA" $JVM_OPTS $cassandra_parms -cp "$CLASSPATH" $props "$class"

转换为:

echo $NUMACTL "$JAVA" $JVM_OPTS $cassandra_parms -cp "$CLASSPATH" $props "$class"

然后运行bin/cassandra -f并复制生成的Java命令。直接运行该命令,以查看是否产生分段错误。如果这是您的问题,则需要切换到Sun或IBM JDK,或者您可以升级为OpenJDK 1.7。


在 Red Hat 上,我得到了类似的结果,但操作系统也报告了“Segmentation fault (core dumped)”。 - Raedwald
2
这不仅限于OpenJDK 1.6 - 增加堆栈大小可以解决问题。 - delitescere

0

我也遇到了同样的问题,以下步骤帮助了我。

卸载cassandra $ apt-get remove cassandra

更新apt仓库 $ sudo add-apt-repository ppa:webupd8team/java

重新安装java $ sudo apt-get install oracle-java8-set-default

再次安装cassandra $ apt-get install cassandra

我参考了这个页面上的信息。


-1

如果您确定已正确设置环境变量,请尝试使用命令./cassandra -f start


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接