无法使用 bin/cassandra 启动 Cassandra db

Posted

技术标签:

【中文标题】无法使用 bin/cassandra 启动 Cassandra db【英文标题】:Cannot start Cassandra db using bin/cassandra 【发布时间】:2012-08-07 17:47:35 【问题描述】:

我有 Ubuntu 12.04 和 cassandra 1.1.3(tarball 安装),当我尝试启动 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.

那么,问题出在哪里?

【问题讨论】:

您的数据库是否包含任何数据?还是这是新安装? 是新安装的,之前我用apt-get安装了ubuntu打包的cassandra 1.0,以前启动没有问题。无论如何,2天后,我通过手动删除文件夹卸载了cassandra 1.0,并安装了cassandra 1.1的tarball(按照官方网站上的说明) 更正:我按照 README 文件中的说明进行操作,而不是网站 您的 cassandra.yaml 是否保持不变?它是否引用了正确的 data_file_directories?如果是这样,请尝试将其指向一个新的(空)目录并查看它是否出现。 我检查了 cassandra.yaml,它引用了一个不再存在的旧目录(可能与之前的安装有关)。我设置了以下内容:data_file_directories:/db/cassandra/data,还有:commitlog_directory:/db/cassandra/commitlog,以及,saved_caches_directory:/db/cassandra/commitlog。我尝试了agian,但cassandra没有出现,终端返回同样的错误。 【参考方案1】:

问题可能是由使用 OpenJDK 引起的,如 Cassandra 错误报告中所述但是,请参阅此处的 cmets,了解 Sun/Oracle 和其他 JVM 上出现此问题的情况:

https://issues.apache.org/jira/browse/CASSANDRA-2441

如果您无法安装 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。

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

【讨论】:

在 Red Hat 6 上使用 256k 堆栈大小修复了这个问题。 我在 Sun 1.7.0_15 JDK 上也遇到了这个问题,设置 -Xss280k 解决了这个问题。所以这个问题不仅限于 OpenJDK。 我在 Amazon Linux 64 位 AMI (OpenJDK 1.6) 上获得了 210k 的收益 280k 在 java 版本 "1.6.0_27" OpenJDK 运行时环境 (IcedTea6 1.12.5) (6b27-1.12.5-0ubuntu0.12.04.1) 上为我修复了这个问题 感谢您的帮助。我将它设置为 280k 和 300k 但仍然是同样的错误。我应该尝试多高的价值?我正在使用 Oracle JDK【参考方案2】:

这很可能是由于尝试在 OpenJDK 1.6 下运行造成的,这会导致在 Ubuntu/Debian 下出现分段错误。由于 shell 脚本执行进程的方式,seg 错误被隐藏了。您可以通过如下修改 $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)”。 这不仅限于 OpenJDK 1.6 -- 增加堆栈大小可以解决问题。【参考方案3】:

我也一样。流畅的脚步帮助了我。

移除卡桑德拉 $ 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

我正在使用来自 page 的信息

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于无法使用 bin/cassandra 启动 Cassandra db的主要内容,如果未能解决你的问题,请参考以下文章

06年宝马3系CAS故障

使用CAS实现单点登录功能

无法使用 grails 通过 CAS 单点登录登录

windows平台在tomcat中启动cas报错解决

无法使用 CAS 和 Spring 安全性登录到应用程序

怎么用jdbc连接cassandra数据库