elasticsearch 带docker compose的麋鹿的推荐RAM比率
我有一个8GB内存的生产服务器。我期待在服务器上托管elastic、logstash和kibana。使用docker编写 每个容器的推荐java大小和内存大小是多少。我可以如何配置它 我的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/:/
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堆的两倍吗?