es-stat.txt分析ES内存占用高问题

es-stat.txt 文件分析来看, Elasticsearch 集群包含 3 个节点,每个节点内存分配和使用情况如下:


🧠 内存使用概览(JVM 层)

节点JVM Heap 使用率Heap 已用Heap 最大JVM 外内存 Direct/Mapped 使用
节点A67%~2.9 GB4 GBDirect: ~162 MB
Mapped: ~187 GB
节点B57%~2.5 GB4 GBDirect: ~220 MB
Mapped: ~173 GB
节点C46%~2.0 GB4 GBDirect: ~186 MB
Mapped: ~160 GB

⚠️ 重点异常:Mapped 内存使用极高(非 heap 区域,主要是 memory-mapped files 造成的)。


💡 高内存占用的原因分析

✅ 1. Mapped Buffer Pool 使用过高

  • 所有节点都有 Mapped 内存使用超过 160 GB(甚至高达 187 GB)。

  • 原因:Elasticsearch 默认使用 memory-mapped files (mmapfs) 来访问索引数据。如果 segment 较多、索引量大,会显著占用系统内存。

  • 解决建议

    • 优化索引结构,减少 segment(减少合并频率 & 调整 refresh 间隔)。
    • 如果你用的是 Docker/Kubernetes,建议通过 bootstrap.memory_lock: true 锁住 JVM 使用的内存,避免映射文件占用主机物理内存。

✅ 2. Translog 占用显著

  • 节点A:uncommitted translog 约 1.55 GB。

  • 节点B:约 1.1 GB。

  • 节点C:约 0.9 GB。

  • 原因:写入量大但未及时刷盘,或者刷新间隔设置不合理。

  • 解决建议

    • 检查 index.translog.flush_threshold_sizeindex.translog.durability 设置。
    • 考虑增加手动 flush 频率,或者设置为 async 模式减小堆外占用。

✅ 3. segment 占用高

  • 节点A、B、C:segment memory 分别为 ~306MB, ~317MB, ~354MB。

  • 这部分是 Lucene segment 的缓存内容,包括倒排索引、存储字段、DocValues。

  • 优化建议

    • 减少小 segment:开启 forcemerge 或调整 index.merge.scheduler.max_thread_count
    • 开启压缩存储。

✅ 4. 未使用字段缓存/fielddata,但 query cache miss 很多

  • query cache 命中率极低(如:12M 次查询仅命中 200)。

  • request_cache 基本未启用。

  • 表示:

    • 查询结构无法被缓存(如频繁参数化、使用时间窗口滚动查询)。
    • 频繁 MISS 导致反复计算,增加 CPU & 内存压力。
  • 建议

    • 调整查询结构以提高 cache 命中率。
    • 配置 indices.queries.cache.size 增加缓存大小。

🧪 补充建议

优化点建议
JVM 堆配置当前是 4GB,建议不超过总内存的 50%。若总内存是 64GB,可考虑提升到 8GB,但注意操作系统 page cache 空间也要保留。
内存锁定启用 bootstrap.memory_lock: true 并在 systemd/k8s 中增加 --ulimit memlock unlimited,防止 heap 被 swap 或 file mapped 干扰。
文件描述符当前 open_file_descriptors 已达 2k+,但最大是 1M,短期内问题不大,但需关注。
merge/refresh 频率merge 总耗时、refresh 非常频繁,建议通过调整 refresh_interval 增加刷新间隔,减少资源消耗。

✅ 节点资源使用

node-1    heap: 67%  mapped: 187GB  ip: 10.0.0.1
node-2    heap: 57%  mapped: 173GB  ip: 10.0.0.2
node-3    heap: 46%  mapped: 160GB  ip: 10.0.0.3

[root@localhost snort-2.9.20]# ps aux --sort=-%mem | head -n 11 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND elastic+ 77086 2.8 45.3 5926628 1749404 ? Ssl 13:12 2:50 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -XX:+ShowCodeDetailsInExceptionMessages -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j2.formatMsgNoLookups=true -Djava.locale.providers=SPI,COMPAT --add-opens=java.base/java.io=ALL-UNNAMED -Djava.security.manager=allow -XX:+UseG1GC -Djava.io.tmpdir=/tmp/elasticsearch-7622450778843719240 -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=32,filesize=64m -XX:+UnlockDiagnosticVMOptions -XX:G1NumCollectionsKeepPinned=10000000 -Xms1885m -Xmx1885m -XX:MaxDirectMemorySize=988807168 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=15 -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -Des.distribution.flavor=default -Des.distribution.type=rpm -Des.bundled_jdk=true -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet logstash 78580 1.6 19.4 4889740 751868 ? SNsl 13:29 1:23 /usr/share/logstash/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djdk.io.File.enableADS=true -Djruby.compile.invokedynamic=true -Djruby.jit.threshold=0 -Djruby.regexp.interruptible=true -XX:+HeapDumpOnOutOfMemoryError -Djava.security.egd=file:/dev/urandom -Dlog4j2.isThreadContextMapInheritable=true -cp /usr/share/logstash/logstash-core/lib/jars/checker-qual-3.37.0.jar:/usr/share/logstash/logstash-core/lib/jars/commons-codec-1.14.jar:/usr/share/logstash/logstash-core/lib/jars/commons-compiler-3.1.0.jar:/usr/share/logstash/logstash-core/lib/jars/commons-logging-1.2.jar:/usr/share/logstash/logstash-core/lib/jars/error_prone_annotations-2.21.1.jar:/usr/share/logstash/logstash-core/lib/jars/failureaccess-1.0.1.jar:/usr/share/logstash/logstash-core/lib/jars/google-java-format-1.1.jar:/usr/share/logstash/logstash-core/lib/jars/guava-32.1.3-jre.jar:/usr/share/logstash/logstash-core/lib/jars/j2objc-annotations-2.8.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-annotations-2.14.1.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-core-2.14.1.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-databind-2.14.1.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-dataformat-cbor-2.14.1.jar:/usr/share/logstash/logstash-core/lib/jars/jackson-dataformat-yaml-2.14.1.jar:/usr/share/logstash/logstash-core/lib/jars/janino-3.1.0.jar:/usr/share/logstash/logstash-core/lib/jars/javassist-3.26.0-GA.jar:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.2.20.1.jar:/usr/share/logstash/logstash-core/lib/jars/jsr305-3.0.2.jar:/usr/share/logstash/logstash-core/lib/jars/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-1.2-api-2.17.1.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-api-2.17.1.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-core-2.17.1.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-jcl-2.17.1.jar:/usr/share/logstash/logstash-core/lib/jars/log4j-slf4j-impl-2.17.1.jar:/usr/share/logstash/logstash-core/lib/jars/logstash-core.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.core.commands-3.6.0.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.core.contenttype-3.4.100.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.core.expressions-3.4.300.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.core.filesystem-1.3.100.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.core.jobs-3.5.100.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.core.resources-3.7.100.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.core.runtime-3.7.0.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.equinox.app-1.3.100.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.equinox.common-3.6.0.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.equinox.preferences-3.4.1.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.equinox.registry-3.5.101.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.jdt.core-3.10.0.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.osgi-3.7.1.jar:/usr/share/logstash/logstash-core/lib/jars/org.eclipse.text-3.5.101.jar:/usr/share/logstash/logstash-core/lib/jars/reflections-0.9.11.jar:/usr/share/logstash/logstash-core/lib/jars/slf4j-api-1.7.30.jar:/usr/share/logstash/logstash-core/lib/jars/snakeyaml-1.33.jar org.logstash.Logstash --path.settings /etc/logstash kibana 87484 3.8 6.1 11977548 235664 ? Rsl 14:45 0:19 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../src/cli/dist --logging.dest="/var/log/kibana/kibana.log" --pid.file="/run/kibana/kibana.pid" --deprecation.skip_deprecated_settings[0]="logging.dest" admin 2435 0.6 3.3 3716180 131136 ? Sl 07:12 3:02 /usr/bin/gnome-shell admin 2780 0.0 1.3 1317520 52164 ? Sl 07:12 0:03 /usr/bin/gnome-software --gapplication-service root 1812 0.2 1.1 384988 46096 tty1 Ssl+ 07:12 1:06 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-Ycs6w0/database -seat seat0 -nolisten tcp vt1 admin 3206 0.1 0.3 766860 13744 ? Sl 07:13 0:36 /usr/libexec/gnome-terminal-server admin 2718 0.0 0.2 984720 10380 ? Sl 07:12 0:01 nautilus-desktop --force root 522 0.0 0.2 48724 8236 ? Ss 07:12 0:01 /usr/lib/systemd/systemd-journald geoclue 3057 0.0 0.1 457860 7508 ? Ssl 07:13 0:00 /usr/libexec/geoclue -t 5 检查有哪些不需要的文件占用内存,并删除
05-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值