启动Cassandra遇JVM崩溃及连接拒绝,需修改配置文件吗?
解决Cassandra启动JVM崩溃与连接拒绝问题
首先得明确:你遇到的无法连接到任何服务器本质是Cassandra服务根本没成功启动——启动时Java虚拟机触发了致命的SIGSEGV错误,直接导致进程终止,自然连不上9042端口。咱们一步步来排查修复:
一、先解决JVM崩溃(SIGSEGV)问题
这个错误通常和Java版本兼容性、系统资源限制或Cassandra JVM配置有关,试试下面的方法:
1. 检查Java版本兼容性
Cassandra 3.x系列推荐用OpenJDK 8,但部分特定版本的OpenJDK 8存在已知bug。你当前用的是OpenJDK 8.0_275,可以:
- 升级到OpenJDK 8的最新稳定版本(比如u392),或者切换到Oracle JDK 8(如果环境允许)
- 运行
java -version确认版本是否生效
2. 开启核心转储获取崩溃细节
错误提示里提到核心转储被禁用,先临时开启它,方便后续定位问题:
ulimit -c unlimited
重新启动Cassandra后,崩溃时会生成核心转储文件,结合hs_err_pid27359.log里的堆栈信息,能更精准找到崩溃原因。
3. 调整Cassandra的JVM配置
打开Cassandra安装目录下的conf/jvm.options文件,修改以下参数:
- 降低堆内存:如果你的机器内存不大,默认堆内存可能过高导致崩溃。找到
-Xms和-Xmx行,改成适合你机器的大小,比如:-Xms1G -Xmx1G - 添加规避bug的参数:针对部分OpenJDK 8版本,尝试添加
-XX:+UseParNewGC或者-XX:-UseCompressedOops(注意后者会增加内存占用,仅作为测试用)
4. 检查系统资源
- 确认机器有足够空闲内存,避免内存不足触发JVM崩溃
- 检查磁盘空间:Cassandra的数据目录和日志目录需要足够的可用空间,满盘也会导致启动失败
二、启动成功后解决连接拒绝问题
当Cassandra能正常启动后,如果还是遇到连接拒绝,再检查这些点:
1. 验证Cassandra节点状态
运行nodetool status,确认节点处于UN(Up/Normal)状态,说明服务正常运行
2. 检查Cassandra监听配置
打开conf/cassandra.yaml文件,验证以下配置:
listen_address:本地连接的话设置为127.0.0.1rpc_address:同样设置为127.0.0.1,确保客户端能连接到服务native_transport_port:默认是9042,确认配置未被修改
3. 检查端口占用
用命令确认9042端口是否被其他进程占用:
lsof -i :9042
如果被占用,要么停止占用进程,要么修改cassandra.yaml里的native_transport_port为其他未被占用的端口
总结
优先解决JVM崩溃的问题,这是连接失败的根源。按照上面的步骤逐一排查,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者SANDHYA SINGH
相关产品推荐
相关产品推荐

