0

我们在 weblogic 10 上部署了一个企业 java 应用程序(ear - 几个 ejb 和一个 webapp)并使用 Sun java 5。响应时间、CPU 和内存使用率在负载用户很少的情况下很好,但如果我们将并发用户增加到 > 100 我们在一段时间后看到巨大的 CPU 峰值(例如:- 100 个用户的负载测试,经过 30 多分钟的测试,CPU 变高)。我们想使用 hprof 来分析应用程序并收集统计信息,但只想在 CPU 较高时(即测试 3o 分钟后)才这样做,有没有办法做到这一点?

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

4

3 回答 3

1

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

于 2009-05-17T06:11:48.563 回答
0

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

  • 当 CPU 变高时,只需执行CTRL+BREAK 几次,看看您是否可以“观察”线程所在的位置(在 UNIX 上执行此操作,您可以在进程上调用 kill 并使用暂时忘记的信号编号);
  • 使用 hprof,无论如何都要对整个时间进行分析,看看它是否提供了线索——如果你感兴趣的是 CPU 较高的那一点,那么即使你最初是在低 CPU 的情况下运行一段时间;
  • 从您的程序本身,考虑使用一些通过ThreadMXBean可用的线程分析调用。

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

于 2009-05-17T04:19:41.763 回答
0

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

在弄清楚这一点的同时,考虑将 Web 容器中的会话超时设置为 60 秒,然后重新运行测试。

于 2009-05-17T04:07:20.407 回答