首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MacOS上的jstack中的nid是什么

MacOS上的jstack中的nid是什么
EN

Stack Overflow用户
提问于 2019-09-24 22:52:39
回答 1查看 170关注 0票数 1

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

而MacOS平台上的Hotspot VM实现在使用jstack获取Java线程统计数据时使用pthread_t作为nid,与MacOS上的top -H没有任何相似之处。那么,有没有办法在没有MXBean的情况下找到“繁忙”的Java线程呢?

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

EN

回答 1

Stack Overflow用户

发布于 2019-09-25 07:54:13

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

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

下面是如何使用async-profiler实现这一点

代码语言:javascript
复制
./profiler.sh -d 10 -t -f profile.svg PID

这意味着:在线程模式(-t)下对Java process PID进行10秒(-d 10)的分析,并将输出作为Flame Graph保存到profile.svg。你甚至不需要jstack -这个概要文件已经突出显示了最热门的线程和它们的Java堆栈跟踪。

作为火焰图的替代方案,您可以选择“传统”树视图

通过指定-f profile.html而不是-f profile.svg

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58083047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档