Elasticsearch Java 的 CPU 占用奇高, CPU 几乎 100%的使用率了,怎么排查原因?

2020-08-21 10:09:02 +08:00
 kisshere

服务器一直以来请求数几乎没啥变化,但是 ES 的 java cpu 使用率突然飙升,top 命令一查,CPU 几乎 100%,怎么排查是哪方面造成的?以及如何找出恶意的批量暴力请求?

5189 次点击
所在节点    程序员
12 条回复
zhangxudong
2020-08-21 10:15:09 +08:00
可以看下 hot threads
gabon
2020-08-21 10:22:24 +08:00
threaddump
Jooooooooo
2020-08-21 10:57:16 +08:00
top -H -p <pid>

找到对应进程里占用高的线程

然后 jstack grep 这些线程, 注意进制转换, 上面看见的进程号是十进制的, jstack 里的进程号是十六进制的
lff0305
2020-08-21 11:14:01 +08:00
jmap 看下是不是 heap 满了,100%是在不停的做 GC (按三楼的方法,会看到是 GC Thread 在占 cpu)
Morriaty
2020-08-21 11:30:12 +08:00
官方推荐的 debug 方式也是 _cat/hot_threads,但这玩意的输出不是资深 es 专家真的很难看懂

建议还是观察 kibana 的 monitor 信息,以及观察 gc log 、slow log 之类的
Navee
2020-08-21 13:21:41 +08:00
先看 GC,GC 没问题看系统 IO (磁盘、网络)
yuxianghe
2020-08-21 15:38:01 +08:00
这个原因有很多,我前段时间也排查过一起这种问题,可以参考我的博客
https://my.oschina.net/110NotFound/blog/4311256
TuGai
2020-08-21 16:06:26 +08:00
https://github.com/jvm-profiling-tools/async-profiler
`/profiler.sh -d 10 -e cpu -f ./flamegraph.svg <PID>` 一行命令直接生成热点方法的火焰图
jaylee4869
2020-08-21 16:22:49 +08:00
elastic 官网的权威指南:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/heap-sizing.html
机器至少要分配一半内存给 Lucene 、禁用 swap 。
artifact
2020-08-21 17:58:23 +08:00
我们这边最近也遇到了这个问题,发现是上容器之后,es 没办法正确获取容器核心数, 设置了过大的线程池,创建过多线程导致
brewin
2020-09-18 17:21:01 +08:00
导出线程快照、内存快照、火焰图看看
guguji
2022-10-11 19:42:55 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/700156

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX