基于java的应用程序的线程转储很容易获得,但很难分析!
我们可以从线程转储中看到一些有趣的东西。
假设我们处于负载很重的Java Web应用程序中。而且我经常在高峰时间(高负载下)采用10或15个线程转储文件来生成宽数据。首先,毫无疑问,我们需要调整状态为阻止和监控的代码。其余的 Runnable 主题我无法深入了解。
那么,如果“方法”多次出现在线程转储中,我们可以说它在高负载服务器端比其他更慢或更快吗?当然,我们可以使用更多的分析工具来检查,但是线程转储可能会给我们提供相同的有用信息,特别是我们在生产环境中。
谢谢你的推荐!
万斯
答案 0 :(得分:2)
我会仔细查看每个转储中的线程的调用堆栈,无论线程的状态如何,并询问“它到底在做什么或正在等待什么,为什么?”
您不仅要查看调用堆栈上的函数,还要查看调用函数的代码行。这告诉你电话的本地原因。如果你将堆栈调用的本地原因结合起来,那就为你提供了当时线程正在做什么的完整理由(“为什么链”)。
您正在寻找的是出现在多个快照上的错误原因。 (它只需要在堆栈上进行一次不必要的调用,以使整个样本可以改进,因此堆栈越深,搜索就越好。) 由于它们很糟糕,它们可以修复,您将获得更好的性能。性能提升量大致是显示它们的快照的一小部分。 那是this technique。
答案 1 :(得分:1)
我会说,如果一个方法经常出现在一个线程转储中,你必须
如果您发现线程运行在特定方法中花费了大量时间,则可能还存在一些错误(就像我们使用正则表达式遭受正则表达式引擎中的错误一样)。所以你需要对此进行调查。