无法使用 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的主要内容,如果未能解决你的问题,请参考以下文章