如何使用Java线程转储分析器分析线程转储

Snir Ben Ami
2023-01-22 11:07

线程转储允许您查看在执行线程转储时Artifactory正在做什么的快照。如果您正在进行性能故障排除,这可能非常有用。一个Java线程转储分析器(如fastThread)工具可以很容易地读取、比较和分析多个线程转储。

Artifactory可以生成多个线程转储支持包,但其他选项也要存在。不管它是如何完成的,重要的是要确保在发生问题时生成线程转储。此外,如果线程转储的执行距离太近,可能会有太多噪音,这将使您难以发现有用的信息。同样,间隔太久执行它们可能会导致您错过重要数据。为了获得有用的数据,a很好的经验法则是执行五(5)个连续的线程转储,每个转储之间相隔10秒。

然后,将文件上传到线程分析工具,例如fastThread, Java线程转储分析器。请注意,该工具解析分析线程转储可能需要一段时间。完成后,您将得到一份关于您的线程的分析摘要,如下所示:

线程信息

  • 线程的名字:当使用Java.lang.Thread类来生成一个线程,则该线程将被命名线程——(数量).当使用java.util.concurrent.ThreadFactory类时,线程将被命名池——(数量)线程(数字)
  • 优先级:这表示Java线程的数字优先级。
  • 线程ID:这表示线程的唯一ID。这可以提供一些有用的信息,包括线程的CPU和/或内存使用情况。)
  • 线程状态:一个人类可读的字符串,描述线程的当前状态。
  • 线程Callstack:这表示线程的堆栈跟踪信息。

线程状态:

  • 新:这是一个已经创建但尚未处理的线程。
  • 可运行:这表明线程正在占用CPU空间并处理任务。(它可能在等待状态取决于操作系统分配资源的方式。)2022世界杯阿根廷预选赛赛程
  • 屏蔽:这是一个等待另一个线程释放它的锁以获得监视器锁的线程。
  • 等待:这个线程正在使用等待加入公园方法。
  • Timed_Waiting:这个线程正在使用睡眠等待加入,或公园方法。(Waiting和Timed_Waiting之间的区别是,Waiting无限期地等待,而Timed_Waiting等待到指定的等待时间)

注意:如果任何给定的线程转储对于线程分析器来说太大,下面的Linux命令将用于按大小分割文件:

Split -b <文件大小> <线程转储文件> <段文件>

例如:如果你有一个140 k线程转储命名为myfile执行如下命令:

分割-b 40k myfile段

这将输出四个40 kb文件:segmentaa、segmentab、segmentac、segmentad

有关分析Java线程转储的更多信息在这里