ElasticSearch内存占用率过高怎么办?
文章目录
- 1,先用top看看各个进程的内存占用情况
- 2,不能简单的杀死进程,然后再重启。
- 3,查看一下ElasticSearch进程的具体启动情况
- 4,修改Elasticsearch 的Java堆内存
1,先用top看看各个进程的内存占用情况
先运行top命令,然后再按一下m键,会对内存进行降序排练。
可以看到,排名第一的是elastic,其实就是ElasticSearch。
2,不能简单的杀死进程,然后再重启。
3,查看一下ElasticSearch进程的具体启动情况
ps -ef | grep elasticsearch
或者
systemctl status elasticsearch | more
两行命令意思都一样。
可以看到有三个关于elasticsearch 的进程,进程号PID分别是6764, 6825, 6853。
其实你通过ps -ef | grep elasticsearch
这条命令可以看出来,6825是6853的父进程,6764是6853的父进程。
- 并且,进程6764 Xmx 是64M,Xms是4M,很显然进程6764没有占用太多的内存。
- 但是进程6825 Xmx是8G, Xms是8G,很显然进程6825会占用太多的内存。
- Xmx 是 Java 虚拟机(JVM)的一个参数,代表 “最大堆内存大小(Maximum Heap Size)”。它指定了 JVM 可以使用的最大内存量。
Xms 则代表 “初始堆内存大小(Initial Heap Size)”,即 JVM 启动时初始分配的堆内存大小。
在这里还要解释一下,Elasticsearch 本身是用 Java 编写的应用程序,所以它的运行是通过 Java 虚拟机(JVM)来启动的,也就是通过 /opt/elasticsearch-8.11.4/jdk/bin/java
来执行。
当您启动 Elasticsearch 时,实际上是使用 Java 命令来加载和运行 Elasticsearch 的 Java 代码。
4,修改Elasticsearch 的Java堆内存
找到你的Elasticsearch 安装路径,有这样一个文件夹,/opt/elasticsearch-8.11.4/config
里面有一个jvm.options
这样的文件,打开找到以下部分。
官方建议设置es内存,大小为物理内存的一半,剩下的一半留给lucene。
所以我的机器物理内存为8g,那么我就取消这两行的注释,设置-Xms4g -Xmx4g。
然后再重启Elasticsearch集群。