Elasticsearch 7.x在Ubuntu 22.04内存过高致崩溃求助
解决Elasticsearch内存过高被OOM-killer终止及启动权限问题
一、调整JVM堆大小(核心解决OOM问题)
Elasticsearch默认分配**主机可用内存的50%**作为JVM堆内存,你16GB内存的环境下默认会占用8GB,这是触发系统OOM-killer的直接原因。修改配置降低堆内存:
打开JVM配置文件:
sudo nano /etc/elasticsearch/jvm.options找到堆内存配置行,将默认的
-Xms8g -Xmx8g修改为适合笔记本的数值(建议2GB-4GB,预留足够内存给Chrome、VS Code等工具):-Xms2g -Xmx2g注意:
Xms和Xmx必须保持一致,避免JVM动态调整堆内存带来的性能波动。保存后重启Elasticsearch:
sudo systemctl restart elasticsearch.service
二、修复启动权限异常
针对java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThread")错误,执行以下操作:
- 确保Elasticsearch的核心目录权限正确:
sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch - 调整用户线程数限制,编辑
/etc/security/limits.conf:
添加以下内容:sudo nano /etc/security/limits.confelasticsearch soft nproc 4096 elasticsearch hard nproc 4096 - 重启系统让权限配置生效,再启动Elasticsearch。
三、额外内存优化建议
- 禁用非必需插件:本地开发环境关闭x-pack安全、监控等功能,编辑
/etc/elasticsearch/elasticsearch.yml:xpack.security.enabled: false xpack.monitoring.enabled: false - 调整线程池:根据CPU核心数减少线程池大小,在
elasticsearch.yml中添加:thread_pool.search.size: 2 thread_pool.write.size: 2 - 清理冗余数据:定期删除本地环境不需要的旧索引,降低内存占用。
四、验证优化效果
重启后用以下命令检查内存占用:
ps aux | grep elasticsearch
或查看JVM堆使用情况:
jstat -gc $(pgrep java)
内容的提问来源于stack exchange,提问作者Mohd Farhan Bin Ramli
相关产品推荐
相关产品推荐

