广告
返回顶部
首页 > 资讯 > 服务器 >docker启动ES内存溢出的解决方案
  • 849
分享到

docker启动ES内存溢出的解决方案

2024-04-02 19:04:59 849人浏览 薄情痞子
摘要

在elasticsearch的config中加JVM.options文件,修改堆栈大小,默认是2GB,直接启动es即可,保证之前已经映射了配置文件。 -Xms5g -Xmx5g

elasticsearch的config中加JVM.options文件,修改堆栈大小,默认是2GB,直接启动es即可,保证之前已经映射了配置文件。


-Xms5g
-Xmx5g

完整jvm.options文件如下:


## JVM configuration
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more infORMation
##
################################################################
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms5g
-Xmx5g
################################################################
## Expert settings
################################################################
##
## All settings below this section are considered
## expert settings. Don't tamper with them unless
## you understand what you are doing
##
################################################################
## GC configuration
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatinGoccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
## optimizations
# pre-touch memory pages used by the JVM during initialization
-XX:+AlwaysPreTouch
## basic
# force the server VM (remove on 32-bit client JVMs)
-server
# explicitly set the stack size (reduce to 320k on 32-bit client JVMs)
-Xss1m
# set to headless, just in case
-Djava.awt.headless=true
# ensure UTF-8 encoding by default (e.g. filenames)
-Dfile.encoding=UTF-8
# use our provided JNA always versus the system one
-Djna.nosys=true
# use old-style file permissions on jdk9
-Djdk.io.permissionsUseCanonicalPath=true
# flags to configure Netty
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dio.netty.recycler.maxCapacityPerThread=0
# log4j 2
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-Dlog4j.skipJansi=true
## heap dumps
# generate a heap dump when an allocation from the Java heap fails
# heap dumps are created in the working directory of the JVM
-XX:+HeapDumpOnOutOfMemoryError
# specify an alternative path for heap dumps
# ensure the directory exists and has sufficient space
#-XX:HeapDumpPath=${heap.dump.path}
## GC logging
#-XX:+PrintGCDetails
#-XX:+PrintGCTimeStamps
#-XX:+PrintGCDateStamps
#-XX:+PrintClasshistogram
#-XX:+PrintTenuringDistribution
#-XX:+PrintGCApplicationStoppedTime
# log GC status to a file with time stamps
# ensure the directory exists
#-Xloggc:${loggc}
# By default, the GC log file will not rotate.
# By uncommenting the lines below, the GC log file
# will be rotated every 128MB at most 32 times.
#-XX:+UseGCLogFileRotation
#-XX:NumberOfGCLogFiles=32
#-XX:GCLogFileSize=128M
# Elasticsearch 5.0.0 will throw an exception on unquoted field names in JSON.
# If documents were already indexed with unquoted fields in a previous version
# of Elasticsearch, some operations may throw errors.
#
# WARNING: This option will be removed in Elasticsearch 6.0.0 and is provided
# only for migration purposes.
#-Delasticsearch.json.allow_unquoted_field_names=true

补充:Docker 容器内存限制

Docker 内存限制


docker run -d -i -t -m 256M --memory-swap 512M --name Centos2.12 centos /bin/bash

查看容器实例 内存限制:

限制容器内存大小;

docker run -d -i -t -m 256M --memory-swap 512M --name centos centos /bin/bash


-m, --memory 
# 内存限制大小,单位可以为 b,k,M,g;最小为4M
--memory-swap
# 内存+交换分区大小总限制
--memory-reservation # 预留内存大小;容器在宿主机最小占用内存;
--oom-kill-disable
# out-of-memory 内存溢出;限制kill容器进程,默认没设置
--oom-score-adj
# 容器被 OOM killer 杀死的优先级,范围是[-1000, 1000],默认为 0
--memory-swappiness
# 用于设置容器的虚拟内存控制行为。值为 0~100 之间的整数
--kernel-memory
核心内存限制,最小为 4M。

1、memory 设置容器内存大小;


--memory-swap 不是交换分区,而是 memory + swap 的大小;
容器的交换分区 swap = memory-swap - memory

2、Docker 默认容器交换分区的大小和内存相同


memory-swap 不设置 或者设置为 0 ;
容器的交换分区 swap 大小就是 memory 的小大;
容器的进程使用最大内存 = memory + swap

3、memory-swap 设置


当 memory-swap 设置为 -1 时;
容器内存大小为 memory 设置的大小;
交换分区大小为宿主机 swap 大小;
容器进程能使用的最大内存 = memory + 宿主机 swap 大小;

4、内存溢出


--oom-kill-disable
限制 kill 容器进程; (必须设置在 memory 之后才有限;)
docker run -d -i -t -m 256M --oom-kill-disable --name Centos-1 centos /bin/bash

5、核心内存 & 用户内存

核心内存和用户内存不同的地方在于核心内存不能被交换出。

不能交换出去的特性使得容器可以通过消耗太多内存来堵塞一些系统服务。


核心内存包括:
stack pages(栈页面)
slab pages
Socket memory pressure
tcp memory pressure

可以通过设置核心内存限制来约束这些内存。

每个进程都要消耗一些栈页面,通过限制核心内存,可以在核心内存使用过多时阻止新进程被创建。


docker run -d -i -t -m 500M --kernel-memory 128M --name Centos-2 centos /bin/bash
限制容器内存 256M;限制核心内存 128M 。
docker run -d -i -t --kernel-memory 128M --name Centos-3 centos /bin/bash
内存为宿主机memory大小, 限制核心内存 128M

6、Swappiness 内存回收页

容器的内核可以交换出一定比例的匿名页。


--memory-swappiness就是用来设置这个比例的。
--memory-swappiness可以设置为从 0 到 100。
# 0 表示关闭匿名页面交换。
# 100 表示所有的匿名页都可以交换。默认情况下,如果不适用--memory-swappiness,则该值从父进程继承而来。
docker run -d -i -t --memory-swappiness=0 --name Centos-4 centos /bin/bash
将--memory-swappiness设置为 0 可以保持容器的工作集,避免交换代理的性能损失。

Swappiness 的值越大,表示越积极使用swap分区,越小表示越积极使用物理内存。默认值swappiness=60


sysctl vm.swappiness = 100 
# cat /proc/sys/vm/swappiness

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: docker启动ES内存溢出的解决方案

本文链接: https://www.lsjlt.com/news/122550.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • docker启动ES内存溢出的解决方案
    在elasticsearch的config中加jvm.options文件,修改堆栈大小,默认是2GB,直接启动es即可,保证之前已经映射了配置文件。 -Xms5g -Xmx5g ...
    99+
    2022-11-12
  • Android 使用帧动画内存溢出解决方案
    Android 使用帧动画内存溢出解决方案 最近在项目遇到的动画效果不好实现,就让UI切成图,采用帧动画实现效果,但是在使用animation-list时,图片也就11张,每张...
    99+
    2022-06-06
    内存溢出 解决方案 动画 Android
  • Spring Cloud Gateway 内存溢出的解决方案
    记 Spring Cloud Gateway 内存溢出查询过程 环境配置: org.springframework.boot : 2.1.4.RELEASE ...
    99+
    2022-11-12
  • vue项目内存溢出问题及解决方案
    目录vue项目内存溢出的解决vue项目内存溢出问题问题解决方法1解决方法2总结vue项目内存溢出的解决 最近在对原有项目进行迭代升级,有用代码越来越多,导致内存溢出了。 正常启动运行...
    99+
    2023-01-28
    vue项目内存溢出 vue内存溢出 内存溢出问题
  • PHP内存溢出的解决方法详解
    目录1.处理数组时出现内存溢出2.使用sql查询数据,查出来很多,导致内存溢出3.假定日志中存放的记录数为500000条,那么解决方案如下4.上传excel文件时,出现内存溢出的情况...
    99+
    2022-11-13
  • 解决MyEclipse下启动项目时JBoss内存溢出的问题
    配置1:-Xms64m -Xmx512m配置2:-c default -b 0.0.0.0-Xmx1024M -Xms512M -XX:MaxPermSize=256m以上这篇解决MyEclipse下启动项目时JBoss内存溢出的问题就是小...
    99+
    2023-05-31
    jboss 内存溢出 myeclipse
  • Android编程之内存溢出解决方案(OOM)实例总结
    本文实例总结了Android编程之内存溢出解决方案(OOM)。分享给大家供大家参考,具体如下: 在最近做的工程中发现加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提...
    99+
    2022-06-06
    程之 内存溢出 解决方案 Android
  • MySQL OOM(内存溢出)的解决思路
    OOM全称"Out Of Memory",即内存溢出。 内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内...
    99+
    2022-05-23
    MySQL oom MySQL 内存溢出 MySQL 内存溢出解决
  • Java基础之堆内存溢出的解决
    目录一、实战-内存溢出二、实战-堆内存溢出三、堆内存溢出演示代码四、Eclipse Memory Analyzer 分析流程五、堆内存溢出的场景六、商城项目可能存在堆内存溢出的方法一...
    99+
    2022-11-12
  • 解决vue内存溢出报错的问题
    目录vue内存溢出报错vue项目打包内存溢出问题踩坑打包时一直报错从网上搜的答案还是踩坑了最终针对我的有效方案vue内存溢出报错 '"node --max-old-...
    99+
    2022-11-13
  • sql查询数据过多内存溢出的解决方法
    这篇文章主要介绍sql查询数据过多内存溢出的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!正常来说,一般是不会出现这种情况的,但也不能保证,偶尔有这种情况发生,解决方案如下:...
    99+
    2022-10-18
  • Android加载图片内存溢出问题解决方法
    1. 在Android软件开发过程中,图片处理是经常遇到的。 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问...
    99+
    2022-06-06
    方法 图片 内存溢出 Android
  • win10启动时,recovery解决方案出现
    若遇到win10系统中出现的recovery现象,win10启动recovery会怎样?放轻松点,跟小编一起来看具体解决办法。首先进入pe桌面,双击计算机图标,进入系统盘符。输入之后,检查前一个是系统盘。在您回到pe桌面之后,启动工具来修复...
    99+
    2023-07-11
  • docker启动elasticsearch时内存不足怎么解决
    本文小编为大家详细介绍“docker启动elasticsearch时内存不足怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“docker启动elasticsearch时内存不足怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-05
  • Java中的内存溢出问题怎么解决
    本篇内容主要讲解“Java中的内存溢出问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的内存溢出问题怎么解决”吧!一、内存溢出原因内存溢出就是内存不够,引起内存溢出的原因有很...
    99+
    2023-06-15
  • 浅析php内存溢出报错的原因和解决方法
    在日常的 PHP 开发中,经常会遇到内存溢出的问题。内存溢出(memory overflow)指的是程序申请的内存空间超出了系统所能分配给它的范围,导致程序崩溃或者出现其它异常情况。本文将针对 PHP 内存溢出的报错内容进行探讨,希望对读者...
    99+
    2023-05-14
  • redis 使用lettuce 启动内存泄漏错误的解决方案
    redis 使用 lettuce 出现 LEAK: hashedwheelTimer.release() was not called before it's garbage-co...
    99+
    2022-11-12
  • 解决Pytorch内存溢出,Ubuntu进程killed的问题
    pytorch显存越来越多的一个原因 optimizer.zero_grad() loss.backward() optimizer.step() train_loss += l...
    99+
    2022-11-12
  • 导出数据量大的报表内存溢出怎么解决
    小编今天带大家了解导出数据量大的报表内存溢出怎么解决,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“导出数据量大的报表内存溢出怎么解决...
    99+
    2023-06-03
  • Java Main 函数启动不退出的解决方案
    目录背景方案背景 我在准备使用 JVM 的命令时候观察程序的动态,但是发现 Main 函数启动就退出了,所以也没办法直接观察,于是想到了如何让 Main 函数启动一直不退出,这样就可...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作