当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch服务在数据插入jvm堆时挂起并终止

杨良才
2023-03-14

我正在使用elasticsearch 5.6.13版本,我需要一些专家为elasticsearch配置。我在同一个系统中有3个节点(node1、node2、node3),其中node1是主节点,其他2个是数据节点。我有大约40个索引,我用默认的5个主碎片创建了所有这些索引,其中一些有2个副本。我现在面临的问题是,我的数据(抓取)正在日益增长,我的索引中有400GB的数据。类似地,其他3个索引也非常繁忙。从最后几天开始,我在插入数据时遇到了这个问题。我的elasticsearch挂起,然后服务被终止,这影响了我的处理。我试过几种方法。我正在分享系统规格和当前ES配置日志。请提出一些解决方案。

系统规格:RAM:160 GB,CPU:AMD EPYC 7702P 64核处理器,驱动器:2 TB SSD(安装了ES的驱动器还剩下500 GB)

ES配置JVM选项:-Xms26g,-Xmx26g(我只是尝试这个,但不确定我的场景的完美堆大小是多少)我只是编辑这上面的行,其余的文件是defult.我编辑这在所有三个节点jvm.options文件。

ES日志

[2021-09-22T12:05:17983][WARN][o.e.m.j.JVMGMonitorService][sashanode1][gc][170]开销,在过去[7.2s][2021-09-22T12:05:21868][WARN][o.e.m.j.JVMGMonitorService][sashanode1 gc][171]开销,在过去[1.9s][2021-09-22T12:05:51190][o.e.m.j.JVMGMonitorService][sashanode1 172]开销中花费[3.7s]收集,在过去[23.3s][2021-09-22T12:06:54629][WARN][o.e.m.j.JVMGMonitorService][cluster_name][gc][173]开销中花费了[27.7s]收集,在过去[1.1m][2021-09-22T12:06:56536][WARN][o.e.m.j.JVMGMonitorService][cluster_name][gc][174开销中花费了[57.5s]收集,在过去[1.9秒][2021-09-22T12:07:02176][WARN][o.e.m.j.JVMGMonitorService][cluster_name][gc][175]开销中花费[1.9秒]收集,在过去[5.6秒][2021-09-22T12:06:56546][ERROR][o.e.i.e.e.Engine][cluster_name][index_name][3]合并失败的java。lang.OutOfMemoryError:Java堆空间

[2021-09-22T12:06:56,548][ERROR][o. e. b. Elasticsearch chUncaughtExceptionHandler][cluster_name]线程中的致命错误[elasticsearch[cluster_name][批量][T#25]],退出java.lang.OutOfMemoryError:Java堆空间

再来点原木

[2021-09-22T12:10:06,526][INFO][o. e. n. Node][cluster_name]初始化...[2021-09-22T12:10:06,589][INFO][o. e. e. Node环境][cluster_name]使用[1]数据路径,挂载[[[(D:)]],净usable_space[563.3gb],净total_space[1.7tb],自旋?[未知],类型[NTFS][2021-09-22T12:10:06,589][INFO][o. e. e.节点环境][cluster_name]堆大小[1.9gb],压缩的普通对象指针[true][2021-09-22T12:10:07,239][INFO][o. e. n.节点][cluster_name]节点名称[sashanode1],节点ID[2p-ux-OXRKGuxmN0efvF9Q][2021-09-22T12:10:07,240][INFO][o. e. n.Node][cluster_name]version[5.6.13], pid[57096], build[4d5320b/2018-10-30T19:05:08.237Z], OS[Windows Server 2019/10.0/amd64], JVM[Oracle Corporation/0_261HotSpot(TM)64-Bit Server VM/1.8.Java/25.261-b12][2021-09-22T12:10:07,240][INFO][o. e. n.Node][cluster_name]JVM参数[-Xms2g,-Xmx2g,-XX: UseConcMarkSweepGC,-XX: CMSLaunatingCraancyFraction=75,-XX: UseCMSLaunatingCraancyOnly,-XX: AlwaysPreTouch,-Xss1m,-D2048m=true,-D2048m=UTF-8,-D1024k=true,-Djdk.io.permissionsUseCanonicalPath=true,-Dio.netty.no不安全=true,-Dio.netty.noKeySetOptimation=true,-Dio.netty.recycler.maxCapacityPerThread=0,-Dlog4j.shutdownHookEnabed=false,-Dlog4j2.disable.jmx=true,-Dlog4j.skipJansi=true,-XX: HeapDumpOnOutOfMemoryError,-Delasticsearch,-Des.path.home=D:\数据库\ES\弹性和kibana 5.6.13\es_node_1,-Des.default.path.logs=D:\数据库\ES\弹性和kibana 5.6.13\es_node_1\日志,-Des.default.path.data=D

此外,在我的ES文件夹中,有很多带有随机名称的文件(java_pid197036.hprof)可以共享更多详细信息,请建议任何进一步的配置。谢谢

_cluster/stats的输出?漂亮

{u nodes:{“total”:3,“successful”:3,“failed”:0},“cluster_name”:“cluster_name”,“timestamp”:1632375228033,“status”:“red”,“index”:{“count”:42,“shards”:{“total”:508,“primaries”:217,“replication”:1.341013824847927,“index”:{“shards”:“min”:2,“max”:60,“avg”:12.095238095238095,“primaries”:{“min”:1,“max”:20,“avg”:5.166666666666667},“复制”:{“最小”:1.0,“最大”:2.0,“平均”:1.2857142857142858}}},“文档”:{“计数”:107283077,“删除”:1047418},“存储”:{“大小”:“530.2gb”,“大小单位字节”:569385384976,“限制时间”:“0s”,“限制时间单位毫秒”:0},“字段数据”:{“内存大小”:“0b”,“内存大小单位字节”:0,“驱逐”:0},“查询缓存”:{“内存大小”:“0b”,“内存大小以字节为单位”:0,“总计数”:0,“命中计数”:0,“未命中计数”:0,“缓存大小”:0,“缓存计数”:0,“驱逐”:0},“完成”:{“大小”:“0b”,“大小以字节为单位”:0},“段”:{“计数”:3781,“内存”:“2gb”,“内存字节数”:2174286255,“术语内存”:“1.7gb”,“术语内存字节数”:1863786029,“存储字段内存”:“105.6mb”,“存储字段内存字节数”:110789048,“术语向量内存字节数”:“0b”,“术语向量内存字节数”:0,“标准内存”为“31.9mb”,“标准内存字节数”:33528,“点内存字节数”,“点内存字节数”::13742470,“doc_values_memory”:“145.3mb”,“doc_values_memory_字节数”:152440900,“index_writer_memory”:“0b”,“index_writer_memory_字节数”:0,“version_map_memory_字节数”:“0b”,“version_map_memory_字节数”:0,“fixed_bit_set_memory_字节数”:0,“max_auto id_timestamp”:32340;,“节点:{“计数”:{“总计”:3,“数据”:3,“仅协调”:0,“主节点”:1,“摄取”:3},“版本”:[“5.6.13”],“操作系统”:{“可用的处理器”:192,“分配的处理器”:96,“名称”:[{“名称”:“Windows Server 2019”,“计数”:3}],“mem:“{”total:“478.4gb”,“total_in_bytes:”513717497856,“free:”119.7gb”,“free_in_bytes:”128535437312,“used_in_bytes:”358.7gb”,“used_in_bytes:”free_percent:”25,“used_percent:”75},“process:“{”cpu:“{”max:”5},“open u file_descriptor:”{”min:-1,“avg:”0},“jvm”:“{”max_-uptime:“1.9d”,“max_-uptime_in_-millis:”167165106,“versions:“{”version:”1.8.0_261”,“vm_name:”Java HotSpot(TM)64位服务器虚拟机”,“vm_version:”25.261-b12”,“vm_供应商:”Oracle Corporation”,“count:”:3}],“mem:{”max_used:“5gb”,“heap_used_in_bytes:”5460944144,“heap_-max:”5.8gb”,“heap_-used”;“heap”,“fs:{”total:“1.7tb”,“total_in_bytes:”1920365228032,“free:”499.1gb“,”free_in_bytes:”535939969024,“available:”499.1gb“,”available_in_bytes:”535939969024“,”plugins:[],”network_types:“{”transport_types:“{”netty4:”3},“http_types:{”Nettypes:{“netty4”:3}

jvm。选项文件。

## 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

-Xms26g
-Xmx26g

################################################################
## 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

和elasticsearch.yml(主节点)

cluster.name: cluster_name
node.name: node1
node.master : true
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["192.168.11.159", "192.168.11.157"]

共有1个答案

邰胤
2023-03-14

我的问题解决了,这是由于堆大小的问题,实际上我运行的是ES as服务,堆大小默认为2GB,它没有反映。我只是安装了带有更新选项的新服务。jvm文件,堆大小为10GB,然后运行我的集群。它反映了从2GB到10GB的堆大小。我的问题解决了。谢谢你的建议。

要检查堆大小,请使用此命令。

http://localhost:9200/_cat/nodes?h=heap*&v
 类似资料:
  • 我正在实现客户机/服务器文件发送和接收。 正在发送的部分C代码: 部分Java代码接收: 使用readUTF()函数后,服务器挂起或处于无限循环中,不再继续。我已经使用readLine()尝试了BufferedReader。有一个错误是“没有为BufferedReader(InputStream)找到合适的构造函数&readLine()给出警告。除了BufferedReader之外,还有其他替代方

  • 问题内容: 很抱歉,这篇文章很长,但我想知道在向Sun提交错误报告之前是否能对此引起更多的关注。 JVM:6u11 操作系统:Windows XP SP3 硬件:AMD Athlon 64 X2 4600+ @ 2.41GHz,具有3.25 GB RAM。 我相信我在JVM中遇到了一个错误,在该错误中没有给线程任何监视器。在以下线程跟踪中,监视器是由捕获的,最终等待了它。该线程随后被通知。但是,即

  • 主要内容:1.图解对象分配过程,2.Minor GC、Major GC、Full GC,3.TLAB(线程私有缓存区域)1.图解对象分配过程 特殊情况 2.Minor GC、Major GC、Full GC 部分收集:不是完整收集整个Java堆的垃圾收集。其中又分为: 新生代收集(Minor GC/Young GC):只是新生代的垃圾收集 老年代收集(Major GC/Old GC):只是老年代的垃圾收集 混合收集(Mixed GC):收集整个新生代以及部分老年代的垃圾收集 整堆收集(Full

  • 主要内容:1.堆的细分内存结构,2.设置堆内存大小与OOM,3.年轻代与老年代1.堆的细分内存结构 JDK 7以前: 新生区+养老区+永久区 Young Generation Space:又被分为Eden区和Survior区Young/New Tenure generation Space:Old/Tenure Permanent Space:Perm JDK 8以后: 新生区+养老区+元空间 Young Generation Space:又被分为Eden区和Survior

  • 问题内容: 我在新的数字海洋ubuntu 14.04服务器上部署了selenium独立服务器。它无法正常启动。它给出的日志是 我猜在日志中缺少2行。 有人知道为什么会发生吗? 问题答案: 当硒试图产生随机种子时会发生这种情况,但是内核缺乏熵。 解决方案是安装类似的添加熵的软件。参见https://www.digitalocean.com/community/tutorials/how- to-se

  • 我正在构建一个。NET核心web应用程序,在服务器端我为计划任务和长期运行任务添加了hangfire。在我添加的startup.cs文件中: 在configure函数中,我添加了以下内容: 是否有一种方法可以确保只有一个服务器在运行?或者,如果我可以在停止应用程序(IIS)时关闭服务器,并在运行应用程序时再次启动它