簡體   English   中英

在Java 8上運行JStack是否會停止所有線程?

[英]Does running JStack on java 8 stops all threads?

我正在執行JStack命令以按一定間隔進行線程轉儲。

我觀察到,只要執行JStack,目標進程上的所有線程都會停止。 在查看我的log4j 2日志后,我得出了這個結論,在該日志中我發現JStack運行期間沒有日志記錄。

有人可以告訴我JSTack是否掛起/停止目標進程中的所有線程嗎?

是的,線程轉儲和堆轉儲是JDK 8中的“世界停止”操作。
HotSpot JVM在全局安全點執行它們。

這個這個答案,了解更多信息。

對任何線程(甚至只有一個)進行堆棧跟蹤都會使所有線程到達安全點。 你可以看到這個

每當由於某種原因(不僅是GC)而停止JVM時,都會打印此信息

-XX:+PrintGCApplicationStoppedTime

這將打印包括停止原因的統計信息。

-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1

有計划引入特定於線程的停止,但是jstack需要安全指向每個線程。

我認為拍攝線程快照時會有一個周期性的世界暫停。

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

它並沒有改變傳統意義上的線程狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM