You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何排查Docker中Cassandra启动失败报退出码137的问题

问题根因定位

退出码137是Linux系统下进程被**内存溢出杀手(OOM Killer)**强制终止的标志性返回值,你的日志显示Cassandra已经完成启动流程,之后突然退出没有错误日志,完全符合OOM终止的特征。

诊断步骤

  • 第一步先确认是否为OOM导致:执行docker inspect cassandra,查看返回结果中State.OOMKilled字段是否为true;也可以执行dmesg | grep cassandra查看系统内核日志,是否存在OOM终止Cassandra进程的记录。
  • 检查Docker运行时可用内存:Cassandra默认会自动分配宿主机总内存的1/2作为JVM堆内存,加上堆外内存开销,单节点最低需要4G可用内存才能稳定运行。如果是Windows/macOS端的Docker Desktop,默认分配的内存通常只有2G,完全无法满足需求。
  • 排查数据版本兼容问题:你之前使用latest标签(对应4.x最新版)运行过,挂载目录下遗留的系统表数据和3.x版本不兼容,也会导致启动后静默崩溃。
  • 检查挂载目录权限:Cassandra镜像默认使用UID为999的普通用户运行,如果你本地的./cassandra/cassandra-data目录没有开放写入权限,进程写入数据失败也会触发异常退出。

解决方案

  1. 调整Docker运行时内存配额:如果使用Docker Desktop,在设置-资源界面将内存上限调整到至少8G;如果是WSL2后端,需要在用户目录下创建.wslconfig文件配置内存上限,修改后重启WSL生效。
  2. 修改docker-compose配置,手动限制内存并指定JVM堆大小,避免Cassandra自动分配过大内存:
version: '3'

services:
  cassandra:
    image: cassandra:3.0.24
    container_name: cassandra
    # 指定运行用户,避免权限问题
    user: 999
    ports:
      - '7000:7000'
      - '9042:9042'
      - '9142:9142'
    volumes:
      - ./cassandra/cassandra-data:/var/lib/cassandra
    environment:
      - CASSANDRA_SEEDS=cassandra
      - CASSANDRA_PASSWORD_SEEDER=yes
      - CASSANDRA_PASSWORD=cassandra
      # 手动指定JVM堆大小,HEAP_NEWSIZE建议为MAX_HEAP_SIZE的1/4到1/5
      - MAX_HEAP_SIZE=4G
      - HEAP_NEWSIZE=800M
    # 配置容器内存限制
    deploy:
      resources:
        limits:
          memory: 8G
        reservations:
          memory: 4G
    networks:
      - default-dev-network

networks:
  default-dev-network:
    external: true
  1. 清空旧数据目录:备份本地./cassandra/cassandra-data目录中的内容后清空所有文件,重新启动容器生成对应版本的系统表数据。
  2. 确认端口无占用:执行ss -tulnp | grep -E ':(7000|9042|9142)\s'检查宿主机对应端口没有被其他进程占用。

内容的提问来源于stack exchange,提问作者Yura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:24:02