【发布时间】:2011-07-22 02:36:10
【问题描述】:
不确定这个问题应该是在这里还是在 serverfault 中,但它与 java 相关,所以这里是:
我有两台服务器,技术非常相似:
- server1 是 Oracle/Sun x86,具有双 x5670 CPU (2.93 GHz)(每个 4 核),12GB RAM。
- server2 是 Dell R610,配备双 x5680 CPU (3.3 GHz)(每个 6 核),16GB RAM。
两者都运行 Solaris x86,配置完全相同。
两者都启用了涡轮增压,并且没有超线程。
因此,server2 应该比 server1 稍快。
我正在两个平台上运行以下简短的测试程序。
import java.io.*;
public class TestProgram {
public static void main(String[] args) {
new TestProgram ();
}
public TestProgram () {
try {
PrintWriter writer = new PrintWriter(new FileOutputStream("perfs.txt", true), true);
for (int i = 0; i < 10000; i++) {
long t1 = System.nanoTime();
System.out.println("0123456789qwertyuiop0123456789qwertyuiop0123456789qwertyuiop0123456789qwertyuiop");
long t2 = System.nanoTime();
writer.println((t2-t1));
//try {
// Thread.sleep(1);
//}
//catch(Exception e) {
// System.out.println("thread sleep exception");
//}
}
}
catch(Exception e) {
e.printStackTrace(System.out);
}
}
}
我打开 perfs.txt 并对结果进行平均,我得到:
- server1:平均 = 1664,修剪 10% = 1615
- server2:平均 = 1510,修剪 10% = 1429
这是一个有点预期的结果(server2 perfs > server1 perfs)。
现在,我取消注释“Thread.sleep(1)”部分并再次测试,现在的结果是:
- server1:平均 = 27598,修剪 10% = 26583
- server2:平均值 = 52320,修剪 10% = 39359
这一次 server2 性能 这对我来说没有任何意义...... 显然,我正在寻找一种在第二种情况下提高 server2 性能的方法。一定有某种不同的配置,我不知道是哪一种。
操作系统相同,java版本相同。 它可以与核心数量相关联吗?
也许这是BIOS设置?尽管 BIOS 不同(AMI 与 Dell),但设置看起来非常相似。 我会尽快更新戴尔的 BIOS 并重新测试,但如果有任何见解,我将不胜感激...... 谢谢
【问题讨论】:
-
也许我理解错了,但是鉴于您发布的代码,取消注释 Thread.sleep() 调用甚至会影响时间是没有任何意义的。只有在 Thread.sleep() 之后 花费 t2 时间才有意义。
-
可能是磁盘缓存不同?
-
@davmac :你没有误解,你是对的,这没有任何意义,但仍然是我得到的结果,这就是我发布的原因。跨度>
-
@isobar :我可以检查一下,但是我忘了提到虽然我使用的是“System.out.println”,但在进行任何类型的计算时都会获得相同的结果模式,甚至不是包括 I/O(我尝试了一系列的数学计算,相同的模式)
-
您真正想测量什么?您的程序甚至没有接近服务器性能的有效比较 - System.out.println 不完全是基准标准。为什么不使用开箱即用的基准测试之一?我喜欢 VolanoMark (volano.com/benchmarks.html),因为它的设置是毫无意义的,并且为 (IME) 提供了对典型 Web 应用程序的服务器“牛肉”的非常合理的比较。
标签: java performance settings cpu