分析高负载服务器端下的“可运行”线程转储

时间:2011-03-21 16:46:49

标签: java analysis performance

基于java的应用程序的线程转储很容易获得,但很难分析!

我们可以从线程转储中看到一些有趣的东西。

假设我们处于负载很重的Java Web应用程序中。而且我经常在高峰时间(高负载下)采用10或15个线程转储文件来生成宽数据。首先,毫无疑问,我们需要调整状态为阻止监控的代码。其余的 Runnable 主题我无法深入了解。

那么,如果“方法”多次出现在线程转储中,我们可以说它在高负载服务器端比其他更慢或更快吗?当然,我们可以使用更多的分析工具来检查,但是线程转储可能会给我们提供相同的有用信息,特别是我们在生产环境中。

谢谢你的推荐!

万斯

2 个答案:

答案 0 :(得分:2)

我会仔细查看每个转储中的线程的调用堆栈,无论线程的状态如何,并询问“它到底在做什么或正在等待什么,为什么?”

您不仅要查看调用堆栈上的函数,还要查看调用函数的代码行。这告诉你电话的本地原因。如果你将堆栈调用的本地原因结合起来,那就为你提供了当时线程正在做什么的完整理由(“为什么链”)。

您正在寻找的是出现在多个快照上的错误原因。 (它只需要在堆栈上进行一次不必要的调用,以使整个样本可以改进,因此堆栈越深,搜索就越好。) 由于它们很糟糕,它们可以修复,您将获得更好的性能。性能提升量大致是显示它们的快照的一小部分。 那是this technique

答案 1 :(得分:1)

我会说,如果一个方法经常出现在一个线程转储中,你必须

  1. 优化该方法,因为它被多次调用或
  2. 检查是否经常调用该方法
  3. 如果您发现线程运行在特定方法中花费了大量时间,则可能还存在一些错误(就像我们使用正则表达式遭受正则表达式引擎中的错误一样)。所以你需要对此进行调查。