【问题标题】:Unable to start cassandra : Unable to lock JVM memory (ENOMEM)无法启动 cassandra:无法锁定 JVM 内存 (ENOMEM)
【发布时间】:2021-11-23 05:22:38
【问题描述】:

我正在尝试使用 docker-compose 启动一个 cassandra 容器。我正在从我的 macbook 终端发出以下命令。

docker-compose -f src/main/docker/cassandra.yml up 

我的 cassandra.yml 文件在下面

version: '2'
services:
    primecast-cassandra:
        image: cassandra:3.9
        # volumes:
        #     - ~/volumes/jhipster/primecast/cassandra/:/var/lib/cassandra/data
        ports:
            - 7000:7000
            - 7001:7001
            - 7199:7199
            - 9042:9042
            - 9160:9160
    primecast-cassandra-migration:
        extends:
            file: cassandra-migration.yml
            service: primecast-cassandra-migration
        environment:
            - CREATE_KEYSPACE_SCRIPT=create-keyspace.cql

但是,当我运行 docker-compose 命令来启动 cassandra 服务时,我在终端上收到了一些警告,最终它停止了。

    primecast-cassandra_1            | WARN  14:33:45 Unable to lock JVM memory (ENOMEM). 

This can result in part of the JVM being swapped out, especially with mmapped I/O enabled.  Increase RLIMIT_MEMLOCK or run Cassandra as root.

如果您能提供帮助,不胜感激 谢谢

【问题讨论】:

    标签: docker-compose cassandra cassandra-3.0


    【解决方案1】:

    本质上,此消息告诉您需要为特定用户的锁定内存上的 Linux 系统资源限制指定 memlock unlimited。根据documentation on recommended production settings,解决此问题的正常(非Docker)方法是调整/etc/security/limits.conf 文件(或等效文件):

    cassandra - memlock unlimited
    

    在上面的例子中,cassandra 是运行 Cassandra 的用户。如果您以其他用户的身份运行 Cassandra,则需要相应地进行更改,或者只使用星号 (*) 为所有用户强制执行该设置。例如:

    * - memlock unlimited
    

    在这种Docker Compose v2 的情况下,ulimits 应该是服务配置下的有效条目。将memlock 设置为-1,这样软限制和硬限制都是“无限制”的:

    primecast-cassandra:
        image: cassandra:3.9
        ulimits:
            memlock: -1
        ports:
    

    【讨论】:

      猜你喜欢
      • 2013-02-11
      • 2021-02-25
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多