gpt4 book ai didi

java - Java 中 RH Linux 和 Solaris 之间的 TCP 性能差异?

转载 作者:可可西里 更新时间:2023-11-01 02:43:10 25 4
gpt4 key购买 nike

在比较 RH Linux 和 Solaris 之间的 java TCP 套接字性能时,我的一项测试是通过使用 java 客户端发送字符串并从 java echo 服务器读取回复来完成的。我测量发送和接收数据所花费的时间(即环回往返)。

测试运行了 100,000 次(出现次数越多,结果相似)。根据我的测试,在具有默认系统和网络设置、相同 JVM 参数(如果有)等的同一台计算机上,Solaris 平均比 RH Linux 快 25/30%。

我不明白这么大的区别,我是否缺少某些系统/网络参数?

使用的代码(客户端和服务器)如​​下所示,如果有人有兴趣运行它(必须在命令行中给出出现次数):

import java.io.*;
import java.net.*;
import java.text.*;

public class SocketTest {

public final static String EOF_STR = "EOF";
public final static String[] st = {"toto"
,"1234567890"
,"12345678901234567890"
,"123456789012345678901234567890"
,"1234567890123456789012345678901234567890"
,"12345678901234567890123456789012345678901234567890"
,"123456789012345678901234567890123456789012345678901234567890"
};

public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {
double mean = 0.0;
int port = 30000;
int times = Integer.parseInt(args[0]);
String resultFileName = "res.dat";
new EchoServerSimple(port); // instanciate and run
Socket s = new Socket("127.0.0.1", port);
s.setTcpNoDelay(true);
PrintWriter pwOut = new PrintWriter(s.getOutputStream(), true);
BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
long[] res = new long[times];

int j = 0;
for(int i = 0; i < times; i++) {
if(j >= st.length) j = 0;
long t0 = System.nanoTime();
pwOut.println(st[j++]);
brIn.readLine();
res[i] = System.nanoTime() - t0;
mean += ((double)res[i]) / times;
}
pwOut.println(EOF_STR);
s.close();
print(res, resultFileName);
System.out.println("Mean = "+new DecimalFormat("#,##0.00").format(mean));
}

public static void print(long[] res, String output) {
try {
PrintWriter pw;
pw = new PrintWriter(new File(output));
for (long l : res) {
pw.println(l);
}
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

static class EchoServerSimple implements Runnable {

private ServerSocket _serverSocket;

public EchoServerSimple(int port) {
try { _serverSocket = new ServerSocket(port); }
catch (IOException e) { e.printStackTrace(); }
new Thread(this).start();
}

public void run() {
try {
Socket clientSocket = _serverSocket.accept();
clientSocket.setTcpNoDelay(true);
PrintWriter pwOut = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader brIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
try {
while(true) {
String s = brIn.readLine();
pwOut.println(s);
if(s.equals(EOF_STR)) { clientSocket.close(); break; }
}
} catch (Exception e) {
e.printStackTrace();
try { clientSocket.close(); } catch (IOException e1) { e1.printStackTrace(); }
}
} catch (IOException e) {e.printStackTrace(); }
}
}
}

我在单个 2.3GHz 双核 Nehalem 上为两个操作系统使用 JRE 1.6.0_18。2 个操作系统为 Solaris 10 和 RH Linux 5.4,带有 RT Kernel 2.6.24.7。

非常感谢。

最佳答案

关于java - Java 中 RH Linux 和 Solaris 之间的 TCP 性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3184315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com