首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java 8上运行JStack是否会停止所有线程?

在java 8上运行JStack是否会停止所有线程?
EN

Stack Overflow用户
提问于 2019-03-18 13:39:07
回答 3查看 2.3K关注 0票数 3

我正在执行JStack命令,以便在一定的时间间隔上接受线程转储。

我观察到,每当JStack执行时,目标进程上的所有线程都会停止。在查看了我的log4j 2日志之后,我得出了这个结论,在这些日志中,我发现没有记录JStack运行的持续时间。

有人能告诉我,JSTack是否挂起/停止目标进程中的所有线程?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-19 09:09:57

任何线程(哪怕只有一个线程)的堆栈跟踪都会将所有线程带到safepoint。你可以看到这个

这将在JVM因任何原因(而不仅仅是GC)停止时打印。

代码语言:javascript
复制
-XX:+PrintGCApplicationStoppedTime

这将打印统计数据,包括停止的原因。

代码语言:javascript
复制
-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1

有一个计划引入一个特定于线程的停止,但是jstack需要每个线程都使用safepoint。

票数 4
EN

Stack Overflow用户

发布于 2019-03-18 16:01:47

是的,线程转储和堆转储是JDK 8中的停止世界操作.

HotSpot JVM在全局safepoint上执行它们。

有关更多信息,请参见thisthis答案。

票数 5
EN

Stack Overflow用户

发布于 2019-03-18 13:53:51

我认为当一个线程快照被拍摄时,会有一个周期性的停止世界暂停.

https://dzone.com/articles/logging-stop-world-pauses-jvm

在传统意义上,它并不改变线程的状态。

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

https://stackoverflow.com/questions/55222707

复制
相关文章

相似问题

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