elasticsearch Java 内存溢出(java.lang.OutOfMemoryError)

本文介绍如何修改Elasticsearch的内存配置文件jvm.options,调整最小内存值(xms)和最大内存值(xmx),以优化系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改java的xms(最小内存值)xmx(最大内存值)大小;
需要修改elasticsearch的内存配置文件$HOME/config/jvm.options,看系统配置情况,分配内存大小

graylog@graylog:~$ systemctl status graylog-server mongodb elasticsearch Unit mongodb.service could not be found. ● graylog-server.service - Graylog server Loaded: loaded (/lib/systemd/system/graylog-server.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2025-07-10 18:25:30 CST; 1 week 3 days ago Docs: http://docs.graylog.org/ Main PID: 1092 (graylog-server) Tasks: 442 (limit: 19082) Memory: 2.8G CPU: 3d 9h 5min 866ms CGroup: /system.slice/graylog-server.service ├─1092 /bin/sh /usr/share/graylog-server/bin/graylog-server └─1112 /usr/share/graylog-server/jvm/bin/java -Xms1g -Xmx1g -server -XX:+UseG1GC -XX:-OmitStackTraceInFastThrow -Djdk.tls.acknowledgeCloseNotify=true -Dlog4j2.formatMsgNoLookups=true -jar -Dlog4j.confi> Jul 21 14:53:27 graylog graylog-server[1112]: Exception in thread "http-worker-50" java.lang.OutOfMemoryError: Java heap space Jul 21 14:53:29 graylog graylog-server[1112]: Exception in thread "http-worker-32" java.lang.IllegalStateException: Cannot reset the response as it has already been committed. Jul 21 14:53:29 graylog graylog-server[1112]: at org.glassfish.grizzly.http.io.OutputBuffer.reset(OutputBuffer.java:262) Jul 21 14:53:29 graylog graylog-server[1112]: at org.glassfish.grizzly.http.server.Response.reset(Response.java:772) Jul 21 14:53:29 graylog graylog-server[1112]: at org.glassfish.grizzly.http.server.HttpHandler$1.run(HttpHandler.java:205) Jul 21 14:53:29 graylog graylog-server[1112]: at com.codahale.metrics.InstrumentedExecutorService$InstrumentedRunnable.run(InstrumentedExecutorService.java:180) Jul 21 14:53:29 graylog graylog-server[1112]: at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) Jul 21 14:53:29 graylog graylog-server[1112]: at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) Jul 21 14:53:29 graylog graylog-server[1112]: at java.base/java.lang.Thread.run(Unknown Source) Jul 21 14:54:28 graylog graylog-server[1112]: Exception in thread "CleanCursors-5-thread-4" java.lang.OutOfMemoryError: Java heap space ● elasticsearch.service - Elasticsearch Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2025-07-10 18:26:39 CST; 1 week 3 days ago Docs: https://www.elastic.co Main PID: 1091 (java) Tasks: 180 (limit: 19082) Memory: 4.0G CPU: 5d 19h 4min 39.883s CGroup: /system.slice/elasticsearch.service └─1091 /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=> Jul 10 18:25:30 graylog systemd[1]: Starting Elasticsearch... Jul 10 18:26:39 graylog systemd[1]: Started Elasticsearch. lines 1-37/37 (END)
最新发布
07-22
### 解决 `java.lang.OutOfMemoryError: Java heap space` 错误并防止 Elasticsearch 自动停止 #### 了解错误根源 当遇到 `java.lang.OutOfMemoryError: Java heap space` 错误时,表明JVM中的对象数量超出了分配给该进程的内存容量。对于Elasticsearch而言,默认设置下其JVM堆的最大和最小尺寸均为2GB,在高负载或数据量较大的场景中这可能不足以支撑正常运行[^3]。 #### 调整 JVM 堆大小参数 为了缓解此问题,可以调整启动Elasticsearch服务时传递给JVM的相关参数来增加可用堆空间: ```bash -Xms<size> 设置初始(最小)Java堆大小 -Xmx<size> 设定最大Java堆大小 ``` 例如,如果希望将最小/最大堆设为8G,则可以在配置文件中加入如下指令: ```properties # elasticsearch.yml 中添加或修改以下两行 -Des.heap.size=8g -DXms=8g -DXmx=8g ``` #### 配置垃圾回收器选项 除了增大堆之外,还可以通过优化GC策略减少频繁Full GC带来的性能损耗以及避免因长时间暂停而触发OOM异常。建议采用G1收集器作为首选方案之一,并适当调节新生代比例等参数以适应实际应用场景需求: ```properties -XX:+UseG1GC 启用 G1 Garbage Collector -XX:MaxGCPauseMillis=<value> 尽量使每次GC停顿时间不超过指定毫秒数 -XX:InitiatingHeapOccupancyPercent=<percent> 当整个堆占用率达到百分比时开始并发标记周期 ``` #### 实施监控机制预防潜在风险 部署Prometheus + Grafana组合或其他类似的开源工具链用于持续跟踪集群健康状况;设定告警阈值以便及时发现即将耗尽资源的情况从而采取措施加以防范未然. #### 处理已发生的 OOM 杀手事件 一旦发生OOM killer终止了Elasticsearch节点的服务, 可能会留下一些临时文件或者锁住某些端口造成重启失败等问题。此时应当清理残留状态再尝试恢复操作: ```shell sudo fuser -k <port>/tcp # 强制关闭占用特定TCP端口的所有进程 rm -rf /var/lib/elasticsearch/nodes/* # 清除旧索引缓存目录下的内容(谨慎执行!) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值