Как я увеличиваюсь, UDP получают размер буфера?

У меня есть компьютер, который связывается с камерой через UDP, соединенный с физическим кабелем (никакой маршрутизатор или переключатель). Камера действует как сервер UDP с компьютером как клиент. Время от времени мой APP Java зависает, в то время как изображение передается, линию за линией. Программное обеспечение My Java ожидает строки изображения, которое никогда не получается, и я полагаю, что это могло быть вызвано, получают переполнение буфера.

Я попытался увеличить получить буферный максимальный размер в /etc/sysctl.conf:

sysctl -w net.core.rmem_max 1000000

Моя программа запрашивает 7 000 000 байтов, но в отчетах во время выполнения, что она получила только 212 992 байта.

Когда я пытаюсь спросить ОС минута, значение по умолчанию и максимальный размер:

$ sysctl -a | grep usb 
net.ipv4.udp mem 185535    247780  371670

Как я получаю более крупный буфер? sysctl даже быть считанным?

1
задан 5 February 2019 в 20:38

2 ответа

Тип:

sysctl -w net.core.rmem_max=8388608

Это устанавливает макс. ОС, получают размер буфера для всех типов соединений.

из Linux, объединяющего документацию в сеть

Разрешение медленного трафика UDP

Если Ваш сервер, кажется, не может получить трафик UDP с такой скоростью, как он может получить трафик TCP, это могло быть, потому что Linux, по умолчанию, не устанавливает буферы сетевого стека, столь большие, как они должны поддерживать высокие скорости передачи UDP. Один способ облегчить эту проблему состоит в том, чтобы позволить большей памяти использоваться стеком IP, чтобы хранить входящие данные. Например, используйте команды:

sysctl -w net.core.rmem_max=262143

и:

sysctl -w net.core.rmem_default=262143

увеличить буферную память чтения макс. и значение по умолчанию к 262 143 (256k - 1) от значений по умолчанию max=131071 (128k - 1) и default=65535 (64k - 1). Эти переменные увеличатся, объем памяти, используемый сетевым стеком для, получает и может быть увеличен значительно больше при необходимости для Вашего приложения.

1
ответ дан 7 December 2019 в 15:07

Редактирование к/etc/sysctl.conf было по ошибке, это должно было читать как ниже, и я должен был увеличить значение по умолчанию также:

net.core.rmem_max=1000000
net.core.rmem_default=1000000

Я не знаю, почему ниже не работал бы, когда я ввел его вручную, но я хотел, чтобы значения были установлены при начальной загрузке так или иначе.

sysctl -w net.core.rmem 1000000
0
ответ дан 7 December 2019 в 15:07

Другие вопросы по тегам:

Похожие вопросы: