Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

218
Vistas
¿Por qué el zócalo no se abre a granel a la vez?

Programación de sockets OSX

¿Por qué el zócalo no se abre a granel a la vez?

Estoy usando Intel macOS Big Sur 11.5.1

La prueba de conexión se está realizando con el servidor docker nginx local.

Estamos utilizando Golang para realizar pruebas con los siguientes códigos:

 func TestBulkConnection(t *testing.T) { var worker = 1000 var wg sync.WaitGroup for i := 0; i < worker; i++ { wg.Add(1) //time.Sleep(time.Millisecond * 10) go func(id int) { conn, err := net.Dial("tcp", "localhost:9000") if err != nil { log.Fatal(err) } defer conn.Close() defer wg.Done() fmt.Println("waiting... ", id) time.Sleep(time.Second * 30) }(i) } wg.Wait() }

1000 goroutine que se conectan solo a nginx. Después de la conexión, se usó la función sleep() para asegurarse de que no se hiciera nada.

El cliente creó 1000 goroutines, pero descubrió que solo funcionaban de 200 a 300 nginx y conexiones y el resto no (lo confirmamos con netstat-anv | grep 9000).

Al conectarse, se confirmó que todas las conexiones están bien establecidas cuando se ejecuta la función sleep().

Con nginx y código de cliente, cuando se hizo girar desde ubuntu 18.04 privado, la conexión se confirmó de inmediato.

Creo que es un problema en el lado del servidor nginx, pero no sé la causa del problema.

¿Hay alguna diferencia entre Mac y Ubuntu en esta prueba?


Adicional

 let net = require('net'); for (let i = 0; i < 1000; i++) { const socket = net.connect({ port: 9000 }); socket.on('connect', function () { console.log('connected to server!'); }); }

netstat-anv | grep 9000 | wc-l

2000 conexión bien


Adicional

Los siguientes enlaces se utilizan para aumentar los descriptores de archivos de OSX.

https://wilsonmar.github.io/límites-máximos/

En el modo de recuperación, también se ejecutó 'csrutil disabled'.

 $ ulimit -a -t: cpu time (seconds) unlimited -f: file size (blocks) unlimited -d: data seg size (kbytes) unlimited -s: stack size (kbytes) 8192 -c: core file size (blocks) 0 -v: address space (kbytes) unlimited -l: locked-in-memory size (kbytes) unlimited -u: processes 2048 -n: file descriptors 524288

Pero aún.

 $ netstat -anv | grep 9000 | wc -l 287
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Cada sistema operativo basado en Unix tiene límites en la cantidad de descriptores de archivos que puede abrir un proceso. Además, cada socket consume un descriptor de archivo, al igual que abrir un archivo en el disco o su stdin , stdout y stderr .

MacOS establece de forma predeterminada el límite de descriptores de archivos en 256 por proceso. Por lo tanto, su afirmación de que su proceso Go se detiene alrededor de 200-300 conexiones suena bien. En teoría, debería dejar de poder abrir sockets después de 253 conexiones (3 descriptores de archivo ya asignados a stdin, stdout y stderr).

Ubuntu, por otro lado, establece el límite predeterminado en 1024 . Aún tendrá este problema en Ubuntu, pero podrá abrir más sockets antes de chocar contra la pared.

En ambos sistemas, puede verificar este límite ejecutando el siguiente comando:

 ulimit -n

Nota: puede ejecutar ulimit -a para ver todos los límites.

En MacOS, puede cambiar este límite temporalmente en todo el sistema (se restablecerá después de reiniciar) con el siguiente comando:

 sudo launchctl limit maxfiles 1024 1024

En Ubuntu, puede cambiar este límite en su shell actual con el siguiente comando:

 ulimit -n 1024

Esto debería permitir que tus 1000 conexiones tengan éxito. Tenga en cuenta que el número no tiene que ser potencias de 2. Puede pasar 1500 , por ejemplo. Solo recuerde que su proceso usa descriptores de archivos para otras cosas además de los sockets.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda