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

321
Vistas
¿Fuga de rutina en aws-sdk-go?

Tengo el siguiente fragmento de código con la versión v1.7.9 actual de aws-sdk-go.

 sess, _ := session.NewSession() s3client := s3.New(sess) location, err := s3client.GetBucketLocation(&s3.GetBucketLocationInput{Bucket: &bucket})

Registro la pila de llamadas antes y después de la llamada a GetBucketLocation(). Veo que el número total de goroutines aumenta en dos, con estos dos goroutines adicionales ejecutándose después:

 goroutine 45 [IO wait]: net.runtime_pollWait(0x2029008, 0x72, 0x8) /usr/local/Cellar/go/1.7.4_2/libexec/src/runtime/netpoll.go:160 +0x59 net.(*pollDesc).wait(0xc420262610, 0x72, 0xc42003e6f0, 0xc4200121b0) /usr/local/Cellar/go/1.7.4_2/libexec/src/net/fd_poll_runtime.go:73 +0x38 net.(*pollDesc).waitRead(0xc420262610, 0xbcb200, 0xc4200121b0) /usr/local/Cellar/go/1.7.4_2/libexec/src/net/fd_poll_runtime.go:78 +0x34 net.(*netFD).Read(0xc4202625b0, 0xc42022fc00, 0x400, 0x400, 0x0, 0xbcb200, 0xc4200121b0) /usr/local/Cellar/go/1.7.4_2/libexec/src/net/fd_unix.go:243 +0x1a1 net.(*conn).Read(0xc42023c068, 0xc42022fc00, 0x400, 0x400, 0x0, 0x0, 0x0) /usr/local/Cellar/go/1.7.4_2/libexec/src/net/net.go:173 +0x70 crypto/tls.(*block).readFromUntil(0xc42017c060, 0x2029248, 0xc42023c068, 0x5, 0xc42023c068, 0xc400000000) /usr/local/Cellar/go/1.7.4_2/libexec/src/crypto/tls/conn.go:476 +0x91 crypto/tls.(*Conn).readRecord(0xc42029a000, 0x840917, 0xc42029a108, 0xc420116ea0) /usr/local/Cellar/go/1.7.4_2/libexec/src/crypto/tls/conn.go:578 +0xc4 crypto/tls.(*Conn).Read(0xc42029a000, 0xc420196000, 0x1000, 0x1000, 0x0, 0x0, 0x0) /usr/local/Cellar/go/1.7.4_2/libexec/src/crypto/tls/conn.go:1113 +0x116 net/http.(*persistConn).Read(0xc42000ba00, 0xc420196000, 0x1000, 0x1000, 0x23d3b0, 0xc42003eb58, 0x7a8d) /usr/local/Cellar/go/1.7.4_2/libexec/src/net/http/transport.go:1261 +0x154 bufio.(*Reader).fill(0xc42000cba0) /usr/local/Cellar/go/1.7.4_2/libexec/src/bufio/bufio.go:97 +0x10c bufio.(*Reader).Peek(0xc42000cba0, 0x1, 0xc42003ebbd, 0x1, 0x0, 0xc42000cc00, 0x0) /usr/local/Cellar/go/1.7.4_2/libexec/src/bufio/bufio.go:129 +0x62 net/http.(*persistConn).readLoop(0xc42000ba00) /usr/local/Cellar/go/1.7.4_2/libexec/src/net/http/transport.go:1418 +0x1a1 created by net/http.(*Transport).dialConn /usr/local/Cellar/go/1.7.4_2/libexec/src/net/http/transport.go:1062 +0x4e9 goroutine 46 [select]: net/http.(*persistConn).writeLoop(0xc42000ba00) /usr/local/Cellar/go/1.7.4_2/libexec/src/net/http/transport.go:1646 +0x3bd created by net/http.(*Transport).dialConn /usr/local/Cellar/go/1.7.4_2/libexec/src/net/http/transport.go:1063 +0x50e

Estas rutinas no desaparecen con el tiempo y continúan acumulándose a medida que se realizan más llamadas a GetBucketLocation().

¿Estoy haciendo algo mal (me olvidé de cerrar algún recurso) o hay una fuga de rutina en aws-sdk-go?

Tenga en cuenta que se observa el mismo comportamiento con la s3manager.Downloader::Download() .

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Resulta que me equivoqué al afirmar que las rutinas no desaparecen con el tiempo. Si agrego una suspensión de 10 segundos después de la llamada a GetBucketLocation, antes de imprimir la pila de rutinas, entonces las rutinas adicionales desaparecen.

Creo que la razón de esto es que el paquete net/http de golang mantiene algún tipo de grupo de conexiones que se puede reutilizar. Consulte la siguiente discusión:https://groups.google.com/forum/#!topic/golang-nuts/QckzdZmzlk0

Esperar lo suficiente parece finalmente cerrar las conexiones y detener las rutinas.

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