强大的故障排除功能:top -H 与线程转储文件的“婚姻”

我和经理说过,我喜欢现在的标题。他告诉我说,这很正常,毕竟我还是个单身汉。所以“婚姻”这个词终归还是能入我眼的。但是他已经结婚 16 年了,所以他眼中的“婚姻”可能会和我眼中的有所不同 :-)。所以,我可以说是“半心半意”地选择了这个标题,并继续写下了后面的内容。

在本文中,我将向您展示如何对线程转储文件与 top -H 输出进行合并,然后从中获得具有参考意义的结果。这些结果将帮助您解决 CPU 占用率激增问题。您可在此处查看真实案例,其中讲述了某北美大型交易应用程序如何从此策略中受益的过程。我们也建议您在继续阅读本文前首先阅读此案例研究。

第一步:捕获线程转储文件

首先便是从正在发生 CPU 占用激增情况的应用程序中捕获线程转储文件。目前有 8 种不同的选项可用于捕获线程转储文件。您可根据自己的情况来选择方便的选项。

第二步:捕获“top -H”输出

捕获了线程转储文件后,下一步便是捕获 top -H 输出。在使用“top -H”工具时,其将显示特定进程中所运行的所有线程。同时还会显示该进程中各个进程所占用的 CPU 和内存情况。

您可执行下方的命令来捕获 top -H 输出。

$ top -H -p {PID} > my-top-H.txt

其中,“{PID}”是应用程序的进程 ID。

“my-top-H.txt”是存储 top -H 输出的文件。

第三步:对线程转储文件与 top -H 输出进行分析

现在既然我们已经捕获了线程转储文件和 top -H 输出。那么下一步显然就是对这些数据进行分析。这里我们可以使用 fastThread 工具。

  1. 在浏览器中打开 fastThread 应用程序。
  2. 选择您在第一步中捕获的线程转储文件。
  3. 点击添加文件按钮。
  4. 然后选择在第二步中捕获的 top -H 输出文件。
  5. 点击分析按钮。

图:fastThread 主页上的上传框

这一工具将对两个文件进行分析,然后生成和示例类似的美观报告。报告中包含一个“CPU | 内存”章节。这就是工具对 top -H 与线程转储文件进行综合分析后所得出的内容,同时还会提供应用程序中每个线程所占用的 CPU 和内存情况。从本节中您将可以了解 CPU 消耗最大的线程及其正在执行的准确代码行。

图:各个线程所占用的 CPU 和内存(由 fastThread 生成)

REST API

除了手动收集 top -H 输出与线程转储文件并将其上传至 fastThread 工具之外,您还使用线程转储文件分析 API 以自动化方式进行分析工作。

以下便是通过 REST API 进行数据分析的步骤:

  1. 新建文件
  2. 在文件顶部粘贴您的线程转储文件数据。
  3. 在后在文件底部添加 top -H 输出(位于线程转储文件数据下方)。
  4. 使用最新创建的文件以https://blog.fastthread.io/2016/10/27/thread-dump-analysis-api/如下方式调用 fastThread REST API。

API 将对线程转储文件和“top -H”输出进行分析,然后在 API 响应中回传指标。这些指标将与您在手动上传转储文件时于浏览器中看到的指标相同。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Blog at WordPress.com.

Up ↑

%d bloggers like this: