Windows 10下Cassandra启动失败:遇EXCEPTION_ACCESS_VIOLATION(0x0000005)异常
我之前在Windows环境折腾Cassandra的时候也碰到过一模一样的问题,EXCEPTION_ACCESS_VIOLATION(0x0000005)这个错误大概率和JVM内存配置、Java版本兼容性或者Windows系统的内存限制有关,给你几个亲测有效的排查和解决步骤:
检查Java版本兼容性
Cassandra 3.11.1对Java版本有明确要求,只能用Java 8(OpenJDK或者Oracle JDK都可以,但更推荐OpenJDK)。如果你装的是Java 11及以上版本,大概率会出现这类内存访问错误。可以打开命令行输入java -version确认版本,如果不对,赶紧换成Java 8,记得同步更新JAVA_HOME和JRE_HOME到Java 8的安装路径。调整JVM启动参数(不止-Xmx)
只设置-Xmx2048m可能不够,Cassandra的默认启动参数还需要配置堆初始值和其他内存相关参数,建议修改conf/cassandra-env.bat文件:- 找到文件里的
set MAX_HEAP_SIZE和set HEAP_NEWSIZE配置项 - 修改为:
set MAX_HEAP_SIZE=2048m set HEAP_NEWSIZE=512m
这里
HEAP_NEWSIZE一般设置为MAX_HEAP的1/4左右,能帮助JVM更好地管理新生代内存,减少内存碎片。- 找到文件里的
检查Windows虚拟内存设置
有些Windows系统的虚拟内存配置会和Cassandra的JVM内存设置冲突,你可以尝试调整:- 右键「此电脑」→属性→高级系统设置→高级→性能→设置→高级→虚拟内存→更改
- 取消勾选「自动管理所有驱动器的分页文件大小」
- 选择系统盘,设置为「无分页文件」后点击「设置」,重启电脑再启动Cassandra(注意:如果你的物理内存小于4G,不建议这么做,保持系统自动管理即可)
以管理员身份启动命令行
Windows下的权限限制有时候也会导致Cassandra无法正常分配内存,右键命令提示符选择「以管理员身份运行」,再执行bin/cassandra.bat启动服务,看看是否还报错。确认Cassandra解压路径
确保Cassandra的解压路径里没有空格或者中文,比如D:\Cassandra\apache-cassandra-3.11.1是没问题的,但D:\Cassandra 3.11.1或者D:\卡桑德拉这类路径会导致启动时的各种异常,包括内存访问错误。
如果以上步骤都试过还是不行,可以打开logs/system.log和logs/debug.log查看更详细的错误栈,关键信息能帮助进一步排查问题。
内容的提问来源于stack exchange,提问作者nikjov92




