elasticsearch服务器CPU100%分析

elasticsearch服务器CPU100%分析

1、通过top命令查询占用CPU高的进程ID

image-20200305142041599

2、查询是哪些线程占用比较高

top -Hp 28354
  • H代表显示线程信息
  • p用来指定进程id

image-20200305142128647

发现线程31342、28478等占用比较多的CPU资源

3、将十进制pid转换为十六进制的pid

printf “0x%x” 28478

image-20200305163114839

4、查询具体的线程信息

jstack -l 28354 | grep 6f3e -A 20

image-20200305142239467

这里我们基本上可以确定,当前系统缓慢的原因主要是垃圾回收过于频繁,导致 GC 停顿时间较长。

5、我们通过如下命令可以查看 GC 的情况

jstat -gcutil 28354 1000 10 

28354为进程ID,1000代表每隔1000毫秒检查一次, 10代表检查10次, 10也可以省略, 表示不限次数

image-20200305142701896

可以看到,这里 FGC 指的是 Full GC 数量,这里高达 31115,而且还在不断增长。从而进一步证实了是由于内存溢出导致的系统缓慢。

6、通过jmap输出内存使用信息
jmap -dump:live,format=b,file=28354.hprof 28354

28354为进程ID

使用hprof二进制形式,输出jvm的heap内容到文件

live子选项是可选的,假如指定live选项,那么只输出活的对象到文件

7、通过MAT分析内存dump

MAT下载地址:http://www.eclipse.org/mat/

image-20200312144547018

image-20200312144601414

elasticsearch默认的JVM配置中,Xms、Xmx都为1G,不太够用,我们修改JVM配置,将Xms、Xmx修改为2G

vim /etc/elasticsearch/jvm.options

-Xms2g
-Xmx2g

重启elasticsearch服务后,CPU使用率降了下来。

注意:本文侧重在怎样分析JAVA程序CPU%的问题,而不是对elasticsearch服务的分析、优化

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于部署 Elasticsearch (ES) 集群,我们可以按照以下步骤进行操作: 1. 准备工作 首先需要确定每台服务器的硬件资源是否满足 ES 的需求,例如 CPU、内存、硬盘容量等。建议选择硬件配置相同的服务器。 2. 安装 Java Elasticsearch 是基于 Java 开发的,所以需要先安装 Java 运行环境。可以通过以下命令安装: ``` sudo apt-get update sudo apt-get install openjdk-8-jdk ``` 3. 下载并解压 Elasticsearch 在官网下载 Elasticsearch 的压缩包,解压到合适的目录下。例如: ``` wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-linux-x86_64.tar.gz tar -zxvf elasticsearch-7.14.0-linux-x86_64.tar.gz cd elasticsearch-7.14.0/ ``` 4. 配置 Elasticsearch 修改 Elasticsearch 的配置文件 `config/elasticsearch.yml`,设置集群名称、节点名称、绑定的 IP 地址等,例如: ``` cluster.name: my_cluster node.name: node-1 network.host: 192.168.1.100 ``` 需要注意的是,集群名称需要相同,节点名称需要唯一,IP 地址需要设置为每台服务器的内网 IP。 5. 启动 Elasticsearch 在每台服务器上启动 Elasticsearch,命令如下: ``` ./bin/elasticsearch -d ``` 其中 `-d` 参数表示以后台进程方式启动。 6. 配置集群 在其中一台服务器上执行以下命令,将其他服务器加入到集群中: ``` curl -XPUT http://192.168.1.100:9200/_cluster/settings -d '{ "persistent": { "discovery.zen.ping.unicast.hosts": ["192.168.1.100", "192.168.1.101", "192.168.1.102"] } }' ``` 其中 `192.168.1.100` 是任意一台服务器的 IP 地址,其他 IP 地址为所有服务器的 IP 地址。 7. 验证集群 执行以下命令验证集群是否正常运行: ``` curl http://192.168.1.100:9200/_cat/health?v ``` 如果输出类似以下信息,则表示集群已经正常运行: ``` epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1630570153 06:22:33 my_cluster green 3 3 15 15 0 0 0 0 - 100.0% ``` 至此,三台服务器上的 Elasticsearch 集群就部署完成了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值