我正在执行JStack命令以在某个时间间隔内进行线程转储。
我观察到,每当JStack执行时,目标进程上的所有线程都会停止。在查看了我的log4j 2日志后,我得出了这个结论,我发现JStack运行的持续时间没有记录。
有人能告诉我JSTack是否暂停/停止目标进程中的所有线程?
获取任何线程(甚至只有一个)的堆栈跟踪会使所有线程都安全。你可以看到这个
每次JVM因任何原因(不仅仅是GC)停止时都会打印
-XX:+PrintGCApplicationStoppedTime
这将打印包括停止原因的统计信息。
-XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1
有一个计划引入一个特定于线程的停止,但是jstack
需要安全地指出每个线程。
我认为在拍摄线程快照时会有一个周期性的Stop-the-world暂停。
https://dzone.com/articles/logging-stop-world-pauses-jvm
它不会改变传统意义上的线程状态。