1 votos

¿Cómo puedo aumentar la UDP tamaño de búfer de recepción?

Tengo un ordenador que se comunica con una cámara a través de UDP, conectado con un cable físico (no router o switch). La cámara actúa como el servidor UDP con el equipo como cliente. De vez en cuando mi APLICACIÓN Java se bloquea mientras una imagen se transfiere, línea por línea. Mi software de Java a la espera de una línea de la imagen que nunca se recibe y creo que esto podría ser causado por recibir un desbordamiento de búfer.

He intentado aumentar el tamaño máximo del buffer en /etc/sysctl.conf:

sysctl -w net.core.rmem_max 1000000

Mi programa solicita 7000000 bytes, pero en tiempo de ejecución los informes que recibió solamente 212992 bytes.

Cuando yo trato de hacer el SO min, por defecto, y el tamaño máximo de:

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

¿Cómo puedo obtener un buffer más grande? Es sysctl incluso de ser leído?

1voto

k500 Puntos 11

Tipo:

sysctl -w net.core.rmem_max=8388608

Esto establece el max OS tamaño de búfer de recepción para todos los tipos de conexiones.

de Red de Linux Documentación

Resolver Lento el Tráfico UDP

Si su servidor no parecen ser capaces de recibir el tráfico UDP tan rápido como se puede recibir tráfico TCP, podría ser debido a que Linux, por defecto, no establece la pila de red búferes tan grande como se necesite para soporte de alta UDP tasas de transferencia. Una forma de mitigar este problema es para permitir que más memoria para ser utilizado por la IP de la pila para almacenar entrante de datos. Por ejemplo, puede utilizar los comandos:

sysctl -w net.core.rmem_max=262143

y:

sysctl -w net.core.rmem_default=262143

para aumentar el buffer de lectura de la memoria de max y de forma predeterminada 262143 (256 - 1) a partir de los valores predeterminados de max=131071 (128 k - 1) y por defecto=65535 (64 k - 1). Estas variables van a aumentar la cantidad de memoria utilizada por la red pila para la recibe, y puede ser aumentada significativamente más si necesario para su aplicación.

0voto

Nate Lockwood Puntos 238

La edición de /etc/sysctl.conf fue un error, debería leer a continuación y que yo debería de haber aumentado el valor predeterminado así:

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

No sé por qué los de abajo no funcionan cuando entré por la mano, pero yo quería que los valores en el arranque de todos modos.

sysctl -w net.core.rmem 1000000

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: