starrocks在linux下运行的三大硬性前提:cpu必须支持avx2指令集(cat /proc/cpuinfo | grep avx2有输出)、/proc/sys/vm/overcommit_memory须设为1、ulimit -n不低于65535,任一不满足将导致be启动失败或运行不稳定。

StarRocks 在 Linux 下能跑起来,前提是硬件和系统配置不踩雷——AVX2 指令集、/proc/sys/vm/overcommit_memory 设为 1、ulimit -n ≥ 65535 这三项不满足,BE 节点大概率启动失败或运行不稳定。
检查 CPU 是否支持 AVX2 指令集
StarRocks 的 BE 进程依赖 AVX2 指令加速向量化计算,不支持的 CPU(比如老至强 E5-26xx v3 或部分低功耗 Atom)会直接 crash,报错类似 Illegal instruction (core dumped)。
- 执行
cat /proc/cpuinfo | grep avx2,有输出即通过;无输出则无法运行官方二进制包 - ARM 架构暂无预编译包,必须源码编译,且性能损失明显,生产环境不建议
- 虚拟机需确认宿主机 CPU 支持且虚拟化层透传了 AVX2(VMware Workstation 默认关闭,VirtualBox 需加
VBoxManage modifyvm "vm-name" --cpu-profile "host")
必须调整的内核与系统参数
缺省 CentOS/RHEL 7+ 系统参数会直接导致 BE 启动卡住或 OOM Killer 杀进程,不是可选项,是硬性前置条件。
-
echo 1 | sudo tee /proc/sys/vm/overcommit_memory:关闭内存过度分配检查,否则 BE mmap 大块内存失败 -
echo 0 | sudo tee /proc/sys/vm/swappiness:禁用 swap,StarRocks 严禁使用交换分区 - 修改
/etc/security/limits.conf,为部署用户加两行:* soft nofile 65535* hard nofile 65535,然后重新登录生效 - 检查
timedatectl status,时区必须统一(推荐Asia/Shanghai),时间偏差 >5s 会导致 FE 启动拒绝加入集群
FE 和 BE 的端口与网络配置陷阱
StarRocks 对网络地址识别非常敏感,priority_networks 配错会导致节点间通信走错网卡,甚至注册为 127.0.0.1,后续所有节点都连不上。
- 在
fe.conf中设置priority_networks=192.168.10.0/24(实际网段),**不能写成192.168.10.10/32或带掩码过粗的/16** - BE 的
be.conf中priority_networks必须和 FE 一致,且确保该网段路由可达 - 检查
be_http_port(默认 8040)、heartbeat_service_port(默认 9020)等端口未被占用,尤其注意 YARN、Hadoop、Docker daemon 常占 8040 - 防火墙必须放行:FE 的
rpc_port(9020)、http_port(8030);BE 的heartbeat_service_port(9020)、brpc_port(8060)
JDK 和 MySQL 客户端不是“装了就行”
StarRocks FE 是 Java 进程,但仅依赖 JRE 运行时;MySQL 客户端只用于初始化元数据,不是运行时依赖,但版本不对会导致 CREATE DATABASE 失败。
- JDK 必须是 1.8u162 及以上(
java -version输出含1.8.0_162或更高),OpenJDK 11+ 不兼容 FE - MySQL 客户端建议用 5.7.x(如
mysql-community-client-5.7.35),8.0+ 的默认认证插件(caching_sha2_password)会导致 FE 初始化元库失败 -
JAVA_HOME必须指向 JDK 根目录(如/usr/local/src/jdk1.8.0_162),且$JAVA_HOME/bin在PATH前置,避免系统自带 java 干扰
真正卡住部署的往往不是解压启动脚本,而是 priority_networks 写错、overcommit_memory 没改、CPU 不支持 AVX2 这三处——它们不会报明确错误,只会让进程静默退出或日志里反复打印 “waiting for heartbeat”。











