服务器一直以来请求数几乎没啥变化,但是 ES 的 java cpu 使用率突然飙升,top 命令一查,CPU 几乎 100%,怎么排查是哪方面造成的?以及如何找出恶意的批量暴力请求?
1
zhangxudong 2020-08-21 10:15:09 +08:00
可以看下 hot threads
|
2
gabon 2020-08-21 10:22:24 +08:00 via Android
threaddump
|
3
Jooooooooo 2020-08-21 10:57:16 +08:00
top -H -p <pid>
找到对应进程里占用高的线程 然后 jstack grep 这些线程, 注意进制转换, 上面看见的进程号是十进制的, jstack 里的进程号是十六进制的 |
4
lff0305 2020-08-21 11:14:01 +08:00
jmap 看下是不是 heap 满了,100%是在不停的做 GC (按三楼的方法,会看到是 GC Thread 在占 cpu)
|
5
Morriaty 2020-08-21 11:30:12 +08:00
官方推荐的 debug 方式也是 _cat/hot_threads,但这玩意的输出不是资深 es 专家真的很难看懂
建议还是观察 kibana 的 monitor 信息,以及观察 gc log 、slow log 之类的 |
6
Navee 2020-08-21 13:21:41 +08:00
先看 GC,GC 没问题看系统 IO (磁盘、网络)
|
7
yuxianghe 2020-08-21 15:38:01 +08:00
这个原因有很多,我前段时间也排查过一起这种问题,可以参考我的博客
https://my.oschina.net/110NotFound/blog/4311256 |
8
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>` 一行命令直接生成热点方法的火焰图 |
9
jaylee4869 2020-08-21 16:22:49 +08:00
elastic 官网的权威指南:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/heap-sizing.html 机器至少要分配一半内存给 Lucene 、禁用 swap 。 |
10
artifact 2020-08-21 17:58:23 +08:00
我们这边最近也遇到了这个问题,发现是上容器之后,es 没办法正确获取容器核心数, 设置了过大的线程池,创建过多线程导致
|
11
brewin 2020-09-18 17:21:01 +08:00
导出线程快照、内存快照、火焰图看看
|
12
guguji 2022-10-11 19:42:55 +08:00
|