我有一个 NIO 服务器,它获取导致 ~1meg 响应的小客户端请求。服务器使用以下内容接受新客户端:
SocketChannel clientChannel = server.accept();
clientChannel.configureBlocking(false);
clientChannel.socket().setSendBufferSize(2 * 1024 * 1024);
然后我注销包含 clientChannel.socket().getSendBufferSize() 结果的“客户端连接”行。
在 Windows 上,该设置将客户端套接字的发送缓冲区大小从 8k 更改为 2megs。但是在 linux 上,套接字说它的发送缓冲区是 131,071 字节。
这导致性能很差,因为我的 clientChannel.write 一次只写入 128k,因此需要 7 多遍才能写入所有数据。在 Windows 上,setSendBufferSize 更改显着提高了性能。
Linux 似乎配置为允许大型套接字发送缓冲区:
$ cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304