在 Elasticsearch Docker 容器中,排查CPU高,导出堆栈信息

 查看集群数据总量

1
GET /_cat/allocation?v&h=shards,disk.indices,disk.used,disk.avail

查看各节点的segement memorycache占用量

1
GET /_cat/nodes?v&h=id,port,v,m,fdp,mc,mcs,sc,sm,qcm,fm,im,siwm,svmm

 注意:我这里使用的是7.4.0自带jdk的集群版本。

Docker内进行jmap

当我们使用docker exec -it es01 /bin/bash进入到es的镜像内后,直接使用jmap是找不到的命令的。

不过,我们可以在这个图中发现,因为使用的是自带的jdk,所以我们需要使用jdk/bin/jmap这样来使用。

 我们先尝试使用jps查看:

jdk/bin/jps -lv

可以看到,当前es 的进程PID了(在Docker内,通常都是1)。

再使用jstack,尝试查看当前堆栈:

jdk/bin/jstack 1

却得到一个错误:

1
2
# jdk/bin/jstack 1
1: Unable to open socket file /proc/1/root/tmp/.java_pid1: target process 1 doesn't respond within 10500ms or HotSpot VM not loaded

 通过搜索响应的解决方案,这是因为镜像内执行用户不同导致的。在这里详细说明了如何解决,可以在exec时,指定用户和用户组,进入后,就可以正常执行了。

docker exec -u 1000:0 -it es01 /bin/bash

 Eclipse MAT  来做分析。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值