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

发布于 2024-07-20 18:52:20 字数 311 浏览 10 评论 0 原文

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

我无法使用 jmap,因为我们使用的是 Sun java 5。

We have an enterprise java application(ear - few ejb's and a webapp) deployed on to weblogic 10 and using Sun java 5. The response time , CPU and memory usage is fine under few users of load but if we increase the concurrent users to >100 we see huge CPU spikes after some time (for eg:- load test with 100 users, the CPU goes to high after more than 30 minutes of test). We wanted to use hprof to profile the app and collect the statistics, but wanted to do it only when CPU is high i.e after 3o minutes of the test, is there a way to do it?

I cannot use jmap because we are using Sun java 5.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小女人ら 2024-07-27 18:52:20

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

Huge spikes in CPU can be an indication the GC is running. If so, this will not show up in the profiler. You can run with the -verbosegc to see when the GC is running. (Or use jconsole)

找个人就嫁了吧 2024-07-27 18:52:20

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

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

This is intrinsicly JVM specific. Hence you need to specify which JVM you use (Sun/BEA/IBM etc).

While figuring that out, consider setting the session timeout in your webcontainer down to 60 seconds and rerun the test.

情独悲 2024-07-27 18:52:20

如果没有别的办法,您可以尝试以下几个选项:

  • 当 CPU 变高时,只需按 CTRL+BREAK 几次,看看您是否可以“观察”线程往往在的位置(在UNIX 要做到这一点,你需要使用一个信号号来调用进程的kill(我暂时没有想到);
  • 使用 hprof,无论如何,只需对整个时间进行分析,看看它是否提供了线索 - 如果您感兴趣的是 CPU 较高的部分,那么这可能会占用大部分时间即使您最初在 CPU 较低的情况下运行了一段时间;
  • 从您的程序本身,考虑使用通过 ThreadMXBean 提供的一些线程分析调用。

我很高兴后者不是每个人都喜欢的,但它最终会让你做你想做的事。

If nothing else, a couple of options you could try are:

  • when CPU is going high, just do CTRL+BREAK a few times and see if you can "eyeball" where the threads tend to be (on UNIX to do this, you call kill on the process with a signal number that temporarily escapes my mind);
  • with hprof, just profile over the whole time anyway and see if it offers clues anyway-- if it's the bit where the CPU is high that you're interested in, then that may take up the majority of the time even if you were initially running for a while with low CPU;
  • from your program itself, consider using some of the thread profiling calls available via ThreadMXBean.

I appreciate the latter isn't everybody's cup of tea, but it will ultimately allow you to do what you want to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文