在Sun Java 5中的正在运行的应用程序上使用hprof

时间:2009-05-17 02:20:04

标签: java performance hprof

我们有一个企业级Java应用程序(很少有ejb和一个webapp)部署到weblogic 10并使用Sun java 5.响应时间,CPU和内存使用情况在少数负载用户下很好但是如果我们增加并发如果用户超过100,我们会在一段时间后看到巨大的CPU峰值(例如: - 对100个用户进行负载测试,CPU在超过30分钟的测试后变为高电平)。我们想使用hprof来分析应用程序并收集统计数据,但是只有在CPU很高时才想这样做,即在测试3分钟之后,有没有办法做到这一点?

我不能使用jmap,因为我们使用的是Sun java 5.

3 个答案:

答案 0 :(得分:1)

CPU中出现大量尖峰可能表明GC正在运行。如果是这样,这将不会显示在分析器中。您可以使用-verbosegc运行以查看GC何时运行。 (或使用jconsole)

答案 1 :(得分:0)

这本身就是特定于JVM的。因此,您需要指定您使用的JVM(Sun / BEA / IBM等)。

在计算出来时,请考虑将webcontainer中的会话超时设置为60秒,然后重新运行测试。

答案 2 :(得分:0)

如果不出意外,您可以尝试的几个选项是:

  • 当CPU变高时,只需执行 CTRL + BREAK几次,看看你是否可以“注意”线程往往的位置(在UNIX上执行此操作,你可以调用kill过程中有一个信号暂时逃脱了我的想法);
  • 使用hprof,无论如何只是概况,看看它是否提供了线索 - 如果它是你感兴趣的CPU高,那么可能会占用大部分时间即使您最初运行一段时间CPU较低;
  • 从您的程序本身,考虑使用ThreadMXBean提供的一些线程分析调用。

我很欣赏后者不是每个人的一杯茶,但它最终会让你做你想做的事。