У меня есть сервер NIO, который получает небольшие клиентские запросы, которые приводят к ответам ~ 1 мг. Сервер использует следующее принять новый клиент:.Правильный способ установки размера буфера отправки сокетов на linux?
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
Этот вопрос говорит, что мне нужно установить SendBufferSize перед тем, как принять accept: http://stackoverflow.com/questions/12749174/can-i-increase-the-socket-send-buffer-size-if-the-send- терпит неудачу из-за-к буферу-полной. Но у меня нет clientChannel, пока я не позвоню. –
Мои комментарии к этому вопросу относятся к размеру буфера приема. Вы можете установить размер буфера отправки в любое удобное для вас время. – EJP