java - Full GC 期间的线程转储

标签 java jvm thread-dump

我想知道是否可以在 Full GC 期间获取线程转储

现在在做什么,

  • 在完整GC期间获取时间戳/日期戳

  • 将其与日志进行比较并缩小请求操作的范围 这可能会触发它。

我只是想知道是否有可能在 Full GC 期间获取线程转储

最佳答案

您无法在 GC 期间获取任何详细信息。现在,您可以通过 jstat 获取各种堆的大小,但如果您的完整 GC 是一个 stop-the-world-collection,则意味着其他一切都已停止。

此外,如果您可以获得此信息,它不太可能是您需要知道的信息,它只是一个随机样本,因此除非只有一个地方触发 gc,例如调用 System.gc(),或者只分配一个位置,它不会那么有用。

如果您想知道 System.gc() 在哪里被触发,您可以使用检测(或修改后的 System 类)在显式调用它的地方进行堆栈跟踪。我以前做过这个,发现是DGC。 https://plumbr.eu/blog/garbage-collection/rmi-enforcing-full-gc-to-run-hourly

如果你想知道最高的分配率在哪里,我建议使用内存分析器。这就是工具的用途。它可以向您显示创建最多/最大对象的堆栈跟踪。

关于java - Full GC 期间的线程转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38178293/

相关文章:

java - 使用@JsonFormat时如何配置自定义错误消息?

java - 添加代码到eclipse jvm配置

java - 运行 Spring Boot Web 应用程序时 JVM 崩溃

java - 具有 reentrantLock 条件的应用程序有时会挂起

Tomcat 占用 100% CPU

java - 在不受 Spring 管理的类中使用 KafkaListener

java - 正确使用java类路径,需要澄清

java - 如果我用最新的 JDK 编译了一个 Java 文件,旧的 JVM 是否能够运行 .class 文件?

"waiting on condition"的java线程转储意义

java - OneToMany/ManyToOne 关系的 Hibernate 标准