手机站:/m

中间件_数据库轻淘客-有几种_价格

时间:2021-09-08 15:34编辑:淘客樊里来源:淘客樊里当前位置:主页 > 服务器 >

在本文中,我们将讨论如何解决出现在北美主要交易应用程序中的CPU峰值问题。突然间,这个应用程序的CPU开始达到100%。事实上,淘客app开发,这个团队没有进行任何新的代码部署、任何环境更改,也没有翻转任何标志设置——但突然间CPU开始激增。我们甚至验证了是否有交通量的增加,这是归因于交通量激增。但是流量也没有增加。

数据捕获

这个应用程序运行在Java、Tomcat技术栈上。我们请求站点可靠性工程(SRE)团队从发生此问题的机器上捕获以下两个工件:

1。顶部-H输出

2。线程转储

让我们看看这些工件在本节中包含什么。

总是CPU峰值是由线程引起的。所以我们必须隔离导致CPU峰值的线程。显然这个应用程序有数百个线程。从这数百个线程中,我们需要确定哪些线程导致CPU消耗激增?这是第一个挑战。

这就是"顶级"unix命令行实用工具的用武之地。大多数人可能熟悉"top"unix命令行实用程序。此工具显示设备上运行的所有进程。它还显示了每个进程消耗的CPU和内存。

这个工具有一个秘密的"-H"选项:-),这是很多工程师不熟悉的。它可以这样调用:

其中PID是应用程序的进程Id。显然,这个应用程序的进程Id是31294。因此,SRE团队发出了这个命令。

当用这个"-H"选项调用"top"工具时,网站建站平台,它将开始显示在该特定进程中运行的所有线程。它还将显示该进程中每个线程所消耗的CPU和内存量。下面是我们从这个交易应用程序得到的输出:

图:top-H-p{pid}

正如您从"top-H"输出中看到的,在第一行有一个id为"11956"的线程。仅此线程就消耗了60.9%的CPU。答对 了!!这是第一场胜利。现在使用这个"top-H"选项,我们已经确定了消耗大量CPU的线程。

我们的下一个挑战是确定这个"11956"线程正在执行的代码行。这就是线程转储派上用场的地方。线程转储显示应用程序中运行的所有线程及其代码执行路径(即堆栈跟踪)。您可以使用您方便的选项。我们使用JDK中的"jstack"工具来捕获线程转储。

分析数据

现在我们将"top-H"输出和"thread dumps"上传到fasthread工具。如果您不确定如何将"top-H"输出和线程转储上传到fastThread工具,大数据数据处理,下面是它的说明。这个工具能够分析线程转储和"top-H"输出,并生成直观的报告。这个工具分析并生成了这个漂亮的报告。

这个报告包含"CPU |内存"部分。这是工具结合top-H输出和线程转储的部分,并提供应用程序中每个线程消耗的CPU和内存。

图:CPU,大数据分析方法,每个线程消耗的内存(由fastThread生成)

在上面的屏幕截图中,物联网开发,我们可以看到"Web容器:18第一行的线程报告消耗了"60.9%"CPU。在最后一列中,您可以看到该线程的代码执行路径(即堆栈跟踪)。您可以看到工具现在报告线程名称(即"Web容器:18")和它正在执行的代码路径(当我们看到原始的top-H输出时无法使用)。

图:高CPU消耗线程的堆栈跟踪(由fastThread生成)

分辨率

您可以注意到,'WebContainer:18'线程正在执行java.util.WeakHashMap#输入()代码行。对于不知道的人来说,HashMap不是线程安全的实现。当多个线程同时调用HashMap的get()&put()方法时,可能会导致无限循环。当线程无限循环时,CPU消耗将开始急剧上升。这正是此应用程序中发生的问题。一旦WeakHashMap被ConcurrentHashMap替换,问题就解决了。

我们希望您发现这个简单的技术很有用。

上一篇对象存储_阿里巴巴在线建站平台-数据库连接池_限时特惠

下一篇CDN_阿里云事业全民淘客-部怎么样_促销

云市场知识本月排行

云市场知识精选