Java端口转发性能
Init 我已经实现了一个非常基本的端口转发应用程序,它从客户端获取输入并将其发送到远程sftp服务器 插座:Java端口转发性能,java,performance,sockets,port,sftp,Java,Performance,Sockets,Port,Sftp,Init 我已经实现了一个非常基本的端口转发应用程序,它从客户端获取输入并将其发送到远程sftp服务器 插座: socket sock = server_sock.accept() Socket client_sock = new Socket("remote sfpt server host",port); client_sock.connect(); 然后使用以下逻辑复制每个套接字的输入/输出流 副本: 问题 sftp服务器和基本端口转发服务器都托管在 同样的机器 直接连接到sftp服务器
socket sock = server_sock.accept()
Socket client_sock = new Socket("remote sfpt server host",port);
client_sock.connect();
然后使用以下逻辑复制每个套接字的输入/输出流
副本:
问题
问题是如何在每个sftp服务器上提高这个基本端口转发服务器的性能?Hmm,64k缓冲区可能不会有帮助;网络MTU最大约为1500字节。您和您的操作系统缓冲区如何?与sftp服务器相比,最大接收窗口是多少?您使用了一个巨大的缓冲区,不需要等待8MB的缓冲区,根本没有任何改进。另外,还在[绑定之前]尝试为服务器设置setReceiveBufferSize。我建议您使用带堆外/直接缓冲区的阻塞NIO。您应该能够通过这种方式以GB/s的速率通过环回传递数据。写入时读取,读取时不要阻止写入。我曾经发布过一个性能很好的转发器,你可以找到它。嗯,64k缓冲区可能不会有帮助;网络MTU最大约为1500字节。您和您的操作系统缓冲区如何?与sftp服务器相比,最大接收窗口是多少?您使用了一个巨大的缓冲区,不需要等待8MB的缓冲区,根本没有任何改进。另外,还在[绑定之前]尝试为服务器设置setReceiveBufferSize。我建议您使用带堆外/直接缓冲区的阻塞NIO。您应该能够通过这种方式以GB/s的速率通过环回传递数据。写入时读取,读取时不要阻止写入。我已经张贴了一个良好的性能货代之前,你可以找到它。
byte b[] = new byte[65535];
int bytesRead = 0;
while ((bytesRead =in.read(b)) >= 0){
out.write(b, 0, bytesRead);
out.flush();
}