4

嗨,我正在尝试在 Solaris Sparc 上测试我的 JAVA 应用程序,但出现了一些奇怪的行为。我不是在寻找火焰战争。我只是想知道发生了什么或出了什么问题......

我在 Intel 和 T1000 上运行相同的 JAR,而在 Windows 机器上我能够在 Solaris 机器上获得 100%(性能监视器)cpu 利用率我只能获得 25%(prstat)

该应用程序是我编写的一个自定义服务器应用程序,它使用 netty 作为网络框架。

在 Windows 机器上,我每秒可以达到 200 个以上的请求/响应,包括完整的业务逻辑和对外部 3rd 方的访问,而在 Solaris 机器上,我仅在 25% 的 CPU 下获得大约 150 个请求/响应

可以想象,如果我能让 Sparc 充分发挥作用,我还能从 Sparc 中得到多少请求/响应。

服务器是...

Windows 2003 SP2 x64bit, 8GB, 2.39Ghz Intel 4 core Solaris 10.5 64bit, 8GB, 1Ghz 6 core

两者分别使用 jdk 1.6u21。

有任何想法吗?

4

3 回答 3

2

The T1000 uses a multi-core CPU, which means that the CPU can run multiple threads simultaneously. If the CPU is at 100% utilization, it means that all cores are running at 100%. If your application uses less threads than the number of cores, then your application cannot use all the cores, and therefore cannot use 100% of the CPU.

于 2010-08-26T15:57:31.773 回答
1

没有任何代码,很难提供帮助。一些想法:

  • 分析两个系统上的 Java 应用程序,看看差异在哪里。你可能会感到惊讶。由于 T1 CPU 缺乏乱序执行,您可能会看到在奇怪的区域中缺乏性能。
  • 正如 Erick Robertson 所说,尝试将线程数增加到通过 报告的虚拟内核数prstat,而不是常规内核数。T1000 使用 UltraSparc T1 处理器,它大量使用线程级并行性

另外,请注意您使用的是最新一代的 Intel 处理器和旧的 Sun处理器。我强烈推荐阅读Sun 的《在 UltraSPARC T1 芯片多线程系统上开发和调整应用程序》《在芯片多线程 (CMT) 架构上最大化应用程序性能》 。

于 2010-08-26T16:07:06.140 回答
1

这是一个相当古老的问题,但我们遇到了类似的问题。

需要注意的一个重要事实是 SUN T1000 基于 UltraSpac T1 处理器,该处理器只有 1 个用于 8 个内核的单 FPU。所以如果你的应用程序做了很多甚至一些浮点计算,那么这可能会成为一个问题,因为 FPU 将成为瓶颈。

于 2010-11-17T11:34:36.020 回答