Mysql: Obtuve "marcar tcp 127.0.0.1:3306: conectar: ​​no se puede asignar la dirección solicitada" cuando se usan múltiples rutinas gor concurrentes

Creado en 17 ene. 2019  ·  3Comentarios  ·  Fuente: go-sql-driver/mysql

Descripcion del problema

Obtuve "dial tcp 127.0.0.1:3306: connect: can't assign request address" después de algún tiempo, al usar múltiples goroutines concurrentes:

  • Al usar 8 goroutines concurrentes => todo está bien
  • Cuando se usan más goroutines => después de aproximadamente 15 s, todas las solicitudes fallan con err = "dial tcp 127.0.0.1:3306: connect: can't assign request address". Se han realizado con éxito alrededor de 35 000 solicitudes antes del primer fallo.

Parece que el controlador sql no puede obtener un nuevo puerto para establecer una nueva conexión, pero si es así, no entiendo por qué no reutiliza una conexión existente del grupo.

Tengo los siguientes DBStats cuando ocurre el error:
(sql.DBStats) {
MaxOpenConnections: (int) 0,
Conexiones abiertas: (int) 64,
En uso: (int) 64,
Inactivo: (int) 0,
WaitCount: (int64) 0,
WaitDuration: (time.Duration) 0s,
MaxIdleClosed: (int64) 28252,
MaxLifetimeClosed: (int64) 0
}

Utilizo go-sql-driver V1.4.1 con go 1.11.2, para llegar a un mariaDB que se ejecuta localmente como un contenedor acoplable.
En el siguiente ejemplo, agregué el "pánico" solo para no ser inundado por un montón de errores similares.

Código de ejemplo

// the below code is called repetitly from a configurable number of worker fed using channels (fan-out)
// Mark visa_card entry as migrated
        query := fmt.Sprintf(UPDATE visa_card SET migrated=TRUE WHERE id_card=%s, this.idCard)
        _, err = conf.MySql.ExecContext(ctx, query)
        if err != nil {
            log.Error(ctx, log.EventTypeBusiness, "", err)
            spew.Dump(conf.MySql.Stats())
            panic("the END")
        }
        return err

Registro de errores

{"level":"info","dateTime":"2019-01-17T14:58:04.095+0100","msg":"","appVersion":"0.0.0","component":"VISA-MIGRATOR","country":"bw","eventType":"incoming request","requestId":"d25e58f8-8228-4a7f-9cc4-1fd9ea2230b4","useCase":"","parameters":{"request_headers":{},"request_http_method":"POST","request_uri":"/startImportActiveCards"},"caller":"common/utils/log/ginLog.go:70"}
{"level":"error","dateTime":"2019-01-17T14:58:20.562+0100","msg":"","appVersion":"0.0.0","component":"VISA-MIGRATOR","country":"bw","eventType":"internal","requestId":"d25e58f8-8228-4a7f-9cc4-1fd9ea2230b4","useCase":"startMigration","peer":"internal","caller":"migrator/migrate/migrateActiveCards.go:211","errorDetails":"dial tcp 127.0.0.1:3306: connect: cannot assign requested address"}
(sql.DBStats) {
 MaxOpenConnections: (int) 0,
 OpenConnections: (int) 50,
 InUse: (int) 50,
 Idle: (int) 0,
 WaitCount: (int64) 0,
 WaitDuration: (time.Duration) 0s,
 MaxIdleClosed: (int64) 28258,
 MaxLifetimeClosed: (int64) 0
}
panic: the END

Configuración

* go-sql-driver V1.4.1

* Go versión: Go versión go1.11.2 linux / amd64

* MariaDB 10.4.1 en el contenedor de la ventana acoplable

SO del servidor: por ejemplo, Debian 8.1 (Jessie), Windows 10

Comentario más útil

Prueba esto.

db.SetMaxIdleConns (64)
db.SetMaxOpenConns (64)
db.SetConnMaxLifetime (tiempo.Minuro)

Todos 3 comentarios

Prueba esto.

db.SetMaxIdleConns (64)
db.SetMaxOpenConns (64)
db.SetConnMaxLifetime (tiempo.Minuro)

Muchas gracias @methane por su respuesta tan rápida, ¡la prueba fue exitosa!
Todavía estoy un poco sorprendido de que los valores predeterminados no funcionen correctamente y no entiendo por qué, pero de hecho resolvió mi problema.

Vea este artículo.
http://techblog.en.klab-blogs.com/archives/31093990.html

Todas las imágenes del artículo desaparecen. Están vivos en la versión japonesa del artículo.

http://dsas.blog.klab.org/archives/2018-02/configure-sql-db.html

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

victormongi picture victormongi  ·  4Comentarios

lunemec picture lunemec  ·  7Comentarios

zhaohui-kevin picture zhaohui-kevin  ·  5Comentarios

BSick7 picture BSick7  ·  8Comentarios

julienschmidt picture julienschmidt  ·  7Comentarios