elasticsearch 带docker compose的麋鹿的推荐RAM比率,elasticsearch,docker-compose,elastic-stack,production-environment,elasticsearch,Docker Compose,Elastic Stack,Production Environment" /> elasticsearch 带docker compose的麋鹿的推荐RAM比率,elasticsearch,docker-compose,elastic-stack,production-environment,elasticsearch,Docker Compose,Elastic Stack,Production Environment" />

elasticsearch 带docker compose的麋鹿的推荐RAM比率

elasticsearch 带docker compose的麋鹿的推荐RAM比率,elasticsearch,docker-compose,elastic-stack,production-environment,elasticsearch,Docker Compose,Elastic Stack,Production Environment,我有一个8GB内存的生产服务器。我期待在服务器上托管elastic、logstash和kibana。使用docker编写 每个容器的推荐java大小和内存大小是多少。我可以如何配置它 我的docker compose如下所示 --- version: '3' services kibana: build: context: kibana/ container_name: kibana volumes: - ./kibana/config/:/

我有一个8GB内存的生产服务器。我期待在服务器上托管elastic、logstash和kibana。使用docker编写

每个容器的推荐java大小和内存大小是多少。我可以如何配置它

我的
docker compose
如下所示

---
version: '3'
services

  kibana:
    build:
      context: kibana/
    container_name: kibana
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    networks: ['elk']
    depends_on:
      - elasticsearch
    restart: always

  elasticsearch:
    build:
      context: elasticsearch/
    container_name: elasticsearch
    networks: ['elk']
    volumes:
      - ./elastic-data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    restart: always
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    environment:
      - cluster.name=es-docker
      - node.name=node1
      - bootstrap.memory_lock=true

  logstash:
      build:
        context: logstash/
      container_name: logstash
      volumes:
        - ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
      networks: ['elk']
      ports:
        - "5044:5044"
      depends_on:
        - elasticsearch
      restart: always

networks: {elk: {}}
现在在弹性文档上搜索我看到一些设置,如
-“ES_JAVA_OPTS=-Xms512m-Xmx512m”

所以我想知道。。对于上面的docker compose,我应该允许java堆大小/内存限制的哪些设置,以及如何更新compose以包含它

我的想法是 4GB用于弹性 日志存储2GB 基巴纳1GB


1GB预留给主机

继续我们在上面评论中的讨论,假设大小正确,您现在需要做的是按照讨论的大小调整每个Docker容器的大小。请注意,因为您没有使用Swarm,所以实际上不需要使用v3格式,v2就足够了,因此我修改了下面的
版本
行。我还为每个容器添加了
mem\u limit
,并在
elasticsearch
容器的
environment
部分添加了堆大小

version: '2.3'
services

  kibana:
    build:
      context: kibana/
    container_name: kibana
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    networks: ['elk']
    depends_on:
      - elasticsearch
    restart: always
    mem_limit: 1g

  elasticsearch:
    build:
      context: elasticsearch/
    container_name: elasticsearch
    networks: ['elk']
    volumes:
      - ./elastic-data:/usr/share/elasticsearch/data
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    restart: always
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    environment:
      - cluster.name=es-docker
      - node.name=node1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms2g -Xmx2g"
    mem_limit: 4g

  logstash:
      build:
        context: logstash/
      container_name: logstash
      volumes:
        - ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro
      networks: ['elk']
      ports:
        - "5044:5044"
      depends_on:
        - elasticsearch
      restart: always
      mem_limit: 2g
      environment:
        - "LS_JAVA_OPTS=-Xmx1g -Xms1g"

networks: {elk: {}}

如果你在Logstash内有大量摄入,2GB可能不够。1GB的Kibana和主机声音大约正确。这就为ES容器留下了4GB(其中2GB必须影响堆,以便Lucene获得剩余的2GB)。那就足够了。。。或者不。。。最后,这实际上取决于您的用例以及您想对堆栈做什么。不过,大小应该是相反的,首先你要衡量每个组件需要多少来支持你的用例,然后你要提供符合要求的主机。你能解释一下我上面的评论中有什么不清楚吗?如果有不清楚的地方,也许我可以添加更多细节,但这里的主要问题是,没有足够的上下文信息来评估您的尺码是否合适。您的评论与我使用的尺码一致,这确实很有帮助。然而,这并不是我在Docker composoe中所做的扩展。我需要设置哪些环境选项。。e、 g.
ES_JAVA_OPTS=-Xms512m-Xmx512m
。另外,这是一个评论,不是对这个问题的回答。我的评论并不打算成为一个答案。我的目标是寻找更多关于您关于推荐Java堆大小的问题的信息。现在,假设大小是正确的,您需要知道的是如何在docker compose中指定它们,对吗?为什么mem_limit是java_ops的双集值?它们是否应该相同?
mem\u limit
是提供给容器的内存量,
ES\u JAVA\u OPTS
设置是提供给JVM的堆量。您应该只给堆提供一半的可用内存。这也解释了为什么需要一半大小。我想我会把它添加到下一个用户的答案中。谢谢你的帮助,瓦尔!有人知道“elasticsearch堆应该是机器内存的一半”规则在使用容器mem_limit时是否仍然适用吗?操作系统文件缓存实际上与容器是分开的,它由docker服务器的操作系统管理,对吗?似乎mem_limit可以是java堆加上一点额外的java代码,或者mem_limit真的需要是java堆的两倍吗?