gpt4 book ai didi

java - MacOS 上 jstack 中的 nid 是什么

转载 作者:行者123 更新时间:2023-12-02 00:18:18 26 4
gpt4 key购买 nike

在 Linux/HotSpot VM 上,top -H 可以列出某个 java 进程的所有线程,因此可以发现繁忙线程的线程 id,因此我可以使用该线程 id 来查找 java jstack 输出中的线程(jstack 中的 nid 是 top -H 中线程 id 的十六进制转换)。

虽然 MacOS 平台上的 Hotspot VM 实现在使用 jstack 获取 Java 线程统计信息时使用 pthread_t 作为 nid,但没有任何类似于 top -H 在 MacOS 上。那么有没有办法不用MXBean就能找到“繁忙”的Java线程呢?

或者谁能告诉我在MacOS上如何找到繁忙的Java线程的'nid',根据它我可以通过jstack找到相应的Java线程?

最佳答案

一个小更正:在 macOS 上,nid 不是 pthread_t,而是通过 pthread_mach_thread_np(pthread_t) 获取的线程端口。

无论如何,不​​幸的是,macOS 上没有类似的 top -H 。但如果您只想找到一个繁忙的 Java 线程,则不需要。请改用 Java 分析器。

以下是如何使用 async-profiler 执行此操作:

./profiler.sh -d 10 -t -f profile.svg PID

这意味着:在线程模式 (-t) 下分析 Java 进程 PID 十秒 (-d 10) 并保存作为火焰图输出到 profile.svg。您甚至不需要 jstack - 配置文件已经突出显示 HitTest 门的线程及其 Java 堆栈跟踪。

Flame Graph

作为火焰图的替代方案,您可以选择“传统” TreeView
通过指定 -f profile.html 而不是 -f profile.svg

关于java - MacOS 上 jstack 中的 nid 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58083047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com