当前位置: 首页 > 面试题库 >

跟踪Java线程的创建和生存期

全昊焜
2023-03-14
问题内容

有没有可用的工具来跟踪Java线程的创建和生存期?我将对以下所有内容感兴趣:

  • 调用new Thread()的调用堆栈
  • 调用了start()的调用栈
  • run()方法的生命周期

问题答案:

我已经编写并发布了一个开源工具来回答这个问题。

Java Live线程分析

我在这里博客介绍了该工具。



 类似资料:
  • 问题内容: 在最繁忙的生产安装中,有时会遇到一个似乎陷入无限循环的单线程。经过大量研究和调试,我仍未弄清楚是谁的罪魁祸首,但似乎应该有可能。这是血腥的细节: 当前调试说明: 1) ps -eL 18975 向我展示了Linux pid的问题子线程19269 2) jstack -l 18975 说没有死锁, jstack -m 18975 不起作用 3) jstack -l 18975 确实给了我

  • 我知道Java中内存分配的基本原理——应用程序占用的大部分内存都分配在堆上,堆由所有线程共享,因此没有线程拥有对象的概念,您无法轻松计算线程使用它拥有的所有对象占用了多少内存。 但我想知道是否有任何方法可以计算和汇总从特定线程触发的分配?内存分配发生在堆上,但它总是由想要创建对象的线程触发,所以我想知道是否可以以某种方式分析这种关系? 我的想法是,一个典型的Spring Boot应用程序将引导,从

  • 问题内容: 我在Linux中玩ptrace。我正在尝试使用/ proc / pid / mem接口编写跟踪进程的内存。 我用来完成此任务的功能是: 但是我总是会得到错误:编写:错误的文件描述符。 是否可以使用此方法编写跟踪过程? 问题答案: 您正在以只读模式()打开文件。我建议改用: 但是,从目前尚不清楚这是否可行: memory through open(2), read(2), and lse

  • 我知道Java中内存分配的基本原理-应用程序占用的大部分内存都是在堆上分配的,堆由所有线程共享,因此没有线程拥有的对象的概念,并且您无法轻松计算线程拥有的所有对象占用了多少内存。 但我想知道是否有任何方法可以计算和汇总从特定线程触发的分配?内存分配发生在堆上,但它总是由想要创建对象的线程触发,所以我想知道是否可以以某种方式分析这种关系? 我的想法是,一个典型的Spring Boot应用程序将引导,

  • 问题内容: 更新 :Intellij IDEA的最新版本完全实现了我想要的功能。问题是如何在IDE外部实现此功能(以便我可以将异步堆栈跟踪信息转储到日志文件中),理想情况下无需使用检测代理。 自从我将应用程序从同步模型转换为异步模型以来,调试故障一直遇到问题。 当我使用同步API时,我总是在异常stacktraces中找到我的类,因此我知道从哪里开始寻找问题。使用异步API,我得到的堆栈跟踪既不引

  • 我得到了一个SpringBoot应用程序,它使用SpringSleuth来跟踪服务间调用。在该应用程序中,存在一个ScheduledExecutorService,它在循环中执行http请求(下面的伪代码): 如果我现在查看一下Sleuth生成并存储在Zipkin中的跟踪,我可以看到所有http调用都与单个跟踪关联。很可能是因为跟踪上下文是在调用期间移交的。 如何在开始下一次迭代之前清除当前跟踪,