标签:告诉 stream ref snap 格式化 布尔 idle info dex
1、实战问题来源问题1:大佬们 GET /_nodes/hot_threads 查看热线程的这个API有没有讲解请求结果的文章呢?返回一堆堆栈看不懂......
问题2:ES集群就一台机器 CPU 爆高,但IO、heap_mem都正常。咋搞?hot_thread 我查了,报了一坨,SOS
死磕 Elasticsearch 知识星球微信群
于是就有了这篇文章。
实战业务场景中,当我们遇到集群响应比平常慢且 CPU 使用率高时,我们需要做问题排查,找到根因集群才能恢复“如丝般流畅"。
Elasticsearch提供了监视热线程的能力, 以便能够了解问题所在。
在 Java 中,热点线程(hot threads)是占用大量 CPU 且执行时间很长的线程。
排查如上问题最常用的 API 就是:hot_threads API。
GET /_nodes/hot_threads
GET /_nodes/<node_id>/hot_threads
Hot Threads API 从CPU 端返回有关 ElasticSearch 代码的哪些部分是热点或返回当前集群因某些原因而被卡在何处的信息。
结合刚才的参数,实战一把。以下命令将告诉ElasticSearch以一秒钟的间隔检查处于 WAITING 状态的线程。
GET /_nodes/hot_threads?type=wait&interval=1s
与其他返回 JSON 结果的 API 不同,Hot Threads API返回格式化的文本,你可以在其中区分几个部分。这也是文章开头说的“返回一堆堆栈看不懂”的原因。
在看返回堆栈结果信息之前,先看一些有关Hot Threads API背后的逻辑原理知识。
ElasticSearch 接收所有正在运行的线程,并收集有关每个线程所花费的 CPU 时间,特定线程被阻塞或处于等待状态的次数,被阻塞或处于等待状态的时间等各种信息。
然后等待特定的时间间隔 interval(由时间间隔参数指定)后,ElasticSearch 再次收集相同的信息,并根据运行的时间(降序)对热点线程进行排序。
注意,上述时间是针对 type 参数指定的给定操作类型统计的。
之后,由 ElasticSearch 分析前 N 个线程(其中 N 是由线程参数 threads 指定的线程数)。
ElasticSearch 所做的是每隔几毫秒就会捕获线程堆栈跟踪的快照(快照数量由快照参数 snapshot 指定)。
最终:对堆栈跟踪进行分组以可视化展示线程状态的变化,就是我们看到的执行API 返回的结果信息。
以上的内容,把 hot_threads API 的相关参数串联起来,相信读到这里你会对 hot_threads 有大致的了解。
还是不理解返回结果怎么办?别着急,下面就解读了。
现在,终于到了 hot_threads APi 返回结果部分。
建议放大图片查看。
包含节点的基本信息。
如下所示:
{Data-(110.188)-1}{67A1DwgCR_eM5eFS-6MR1Q}{qTPWEpF-Q4GTZIlWr3qUqA}{10.6.110.188}{10.6.110.188:9301}{dil}
通过如上信息,我们可以知道 Elasticsearch 的热点线程所在节点信息,当热线程API调用涉及多个节点时,这很方便。
接下来的几行可以分为几个子部分。
79.78.4% (391.7ms out of 500ms) cpu usage by thread ‘elasticsearch[Data-(110.188)-1][search][T#38]‘
Hot Threads API响应的下一部分是从以下信息开始的部分:
5/10 snapshots sharing following 35 elements
如上展示了:先前的线程信息将伴随堆栈跟踪信息。
在我们的示例中,
Elasticsearch CPU 使用率高的排查一般都会借助:hot_thread API 或者 top jstack 定位线程堆栈。
本文就 hot_thread API 应用场景、使用、返回结果进行了详细解读,希望对你有帮助。
欢迎留言说一下你对热点线程的理解或者你的实践经验。
如果,你有开头类似的问题,查官方文档也梳理不清楚,也欢迎你留言,根据留言点赞量,我们会写文章专门梳理。
和你一起,死磕 Elasticsearch!
参考:
《Mastering Elasticsearch》
《Elasticsearch 7.0 bookbook》
https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-nodes-hot-threads.html
推荐:
重磅 | 死磕 Elasticsearch 方法论认知清单(2020年国庆更新版)
能拿驾照就能通过 Elastic 认证考试!
更短时间更快习得更多干货!
中国 近 50%+ Elastic 认证工程师出自于此!
和全球 800+ Elastic 爱好者一起死磕 Elasticsearch!
深入解读 Elasticsearch 热点线程 hot_threads
标签:告诉 stream ref snap 格式化 布尔 idle info dex
原文地址:https://blog.51cto.com/15050720/2562580