1.介绍
ES热线程是占用大量 CPU 且执行时间很长的线程,有时候节点CPU使用率90多,响应慢的时候可以查看热线程信息来排查问题
2.获取API
通过下方API获取热点线程:
GET /_nodes/hot_threads
GET /_nodes/<node_id>/hot_threads
3.结果分析
API返回结果第一部分分析:
{DESKTOP-5LSDS9G}{KXZ4VQ_mSD6nhi_nkQUtyg}{Srf9LR-ASlac76ijfEzLaQ}{127.0.0.1}{127.0.0.1:9300} 通过上面的信息,可以看到 Elasticsearch 的热点线程所在节点信息,节点的名称、ip、端口
API返回结果第二部分分析:
38.2% (190.9ms out of 500ms) cpu usage by thread 'elasticsearch[xxx][warmer][T#2]
- [warmer] ——代表 warmer线程操作(可能是 Elasticsearch 索引的预热任务)。
- 38.2% —— 代表名为 warmer的线程在完成统计时占据了所有CPU时间的38.2%。
- cpu usage ——指示我们正在使用 cpu 的类型,当前是线程 CPU的使用率。
通过上方分析可以得出是 warmer线程占据了较多的CPU。
其他类型的线程列举如下:
- recovery_stream 用于恢复模块事件
- cache 用于缓存事件
- merge 用于段合并线程
- index 用于数据索引(写入)线程 等等。
API返回结果第二子部分分析:
8/10 snapshots sharing following 21 elements
app//org.apache.lucene.codecs.lucene80.Lucene80DocValuesProducer$TermsDict.next(Lucene80DocValuesProducer.java:1109)
8/10 表示拍摄的 8 个快照具有相同的堆栈跟踪信息。 这在大多数情况下意味着对于当前线程,检查时间有80%都花在 ElasticSearch 代码的同一部分中,表示可能此部分的代码是问题的原因