【发布时间】:2011-07-05 18:02:26
【问题描述】:
我有一个在高负载下挂起的 Web 应用程序。我不打算详细介绍代码,因为我真的只是想要一些故障排除建议和工具建议。
这是一个网络应用程序,所以每个请求都是一个线程。在高负载测试下,应用程序开始消耗所有 CPU,同时变得无响应。我怀疑请求线程挂在我们正在测试的新代码中。由于 cpu 消耗的事实,我假设这必须在我的应用程序端。我的理解可能是错误的,总 cpu 消耗表明我的第一个故障排除工作应该是查看消耗这些周期的代码。
有哪些工具和/或方法可以检查哪些线程挂起以及在哪些代码行上?同样,我可以轻松地强制应用程序进入有问题的行为。
我已经找到并尝试了 visualvm。似乎是完美的工具。虽然仍然开放的建议。我查看了 Eclipse TPTP,它似乎即将报废,并且需要更重的部署。
【问题讨论】:
-
挂起时暂停一下。查看每个线程。你会明白为什么它被挂起。
jstack也应该给你同样的信息。您不需要任何大工具。 -
@Mike Dunlavey 谢谢。这是个好建议。最初,我认为我想要可用的最轻量级的工具,
jstack肯定有资格作为。在尝试加快使用TPTP的速度时,我放弃了这种努力,转而追求更轻的工具。但是,visualvm对于电动工具来说重量非常轻。只需安装并打开。所有 java 1.6(更新 7)和更高版本的应用程序都简单地显示在该工具中。 -
听起来
visualvm是一款优质应用。不幸的是,从文档中可以看到suffer from these common problems。jstack是一个粗糙的工具,但它会带你直接解决问题。其他按行报告百分比的墙上时间堆栈采样器是 Zoom、可能是 Shark,可能还有 oprofile。
标签: multithreading performance