API用法
GET /_nodes/hot_threads
GET /_nodes/nodeId1,nodeId2/hot_threads
参数介绍
- ignore_idle_threads(Optional, Boolean)
值为true,则会过滤掉已知的空闲线程(例如,在套接字选择中等待,或从空队列中获取任务)。
默认为true
- interval(Optional, time units)
执行热点线程的采样间隔。
默认为500ms
- snapshots(Optional, integer)
线程堆栈跟踪的数量。
默认为 10
- threads
获取的top 热门线程数量。
默认为3,即获取最“热门”的3个线程。
- master_timeout
等待连接到master节点的超时时间。
(Optional, time units)
- timeout
响应超时时间。
默认为30s
- type(Optional, string)
要采样的类型。
可用的选项是:
1)block ——线程阻塞状态的时间。
2)cpu ——线程占据CPU时间。
3)wait ——线程等待状态的时间。
默认为cpu
API回包解读
与其他api不同,hot_threads返回的是格式化文本,而非json结构
//回包的第一部分是热点线程所在节点信息
::: {1594350457001392032}{9ZBFzLp1SkCzwslyFOV3tw}{Mj-03-v1TyamfOyO7rBtGA}{8.4.65.23}{8.4.65.23:26215}{ml.machine_memory=16478932992, rack=cvm_4_200004, xpack.installed=true, set=200004, ip=8.4.65.23, temperature=hot, ml.max_open_jobs=20, ml.enabled=true, region=4}
//热点线程信息,比如采样间隔,当前热点线程数量
Hot threads at 2022-09-10T12:17:00.676, interval=500ms, busiestThreads=3, ignoreIdleThreads=true:
//[search]采样线程名称,该线程占用了17.7% 的cpu时间,
17.7% (88.7ms out of 500ms) cpu usage by thread 'elasticsearch[1594350457001392032][search][T#3]'
//拍摄的10个快照中的2个快照具有下文相同的堆栈信息
2/10 snapshots sharing following 15 elements
org.elasticsearch.search.SearchService.executeFetchPhase(SearchService.java:566)
org.elasticsearch.action.search.SearchTransportService$11.messageReceived(SearchTransportService.java:439)
org.elasticsearch.action.search.SearchTransportService$11.messageReceived(SearchTransportService.java:436)
org.elasticsearch.xpack.security.transport.SecurityServerTransportInterceptor$ProfileSecuredRequestHandler$1.doRun(SecurityServerTransportInterceptor.java:251)
org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
org.elasticsearch.xpack.security.transport.SecurityServerTransportInterceptor$ProfileSecuredRequestHandler.messageReceived(SecurityServerTransportInterceptor.java:309)
org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:66)
org.elasticsearch.transport.TcpTransport$RequestHandler.doRun(TcpTransport.java:1629)
org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:723)
org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:41)
org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
4/10 snapshots sharing following 10 elements
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.util.concurrent.LinkedTransferQueue.awaitMatch(Unknown Source)
java.util.concurrent.LinkedTransferQueue.xfer(Unknown Source)
java.util.concurrent.LinkedTransferQueue.take(Unknown Source)
org.elasticsearch.common.util.concurrent.SizeBlockingQueue.take(SizeBlockingQueue.java:165)
java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)
参考资料