Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java端口转发性能_Java_Performance_Sockets_Port_Sftp - Fatal编程技术网

Java端口转发性能

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服务器

Init 我已经实现了一个非常基本的端口转发应用程序,它从客户端获取输入并将其发送到远程sftp服务器

插座:

socket sock = server_sock.accept()
Socket client_sock = new Socket("remote sfpt server host",port);
client_sock.connect();
然后使用以下逻辑复制每个套接字的输入/输出流

副本:

问题

  • sftp服务器和基本端口转发服务器都托管在 同样的机器

  • 直接连接到sftp服务器,我可以以大约30MB/s的速度传输文件,而

  • 通过端口转发服务器传输文件的速度始终为~3MB/s-4MB/s

  • 我也尝试过ServerSocketChannel,但性能不佳 一样


  • 问题是如何在每个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();
    }