Mysql: Bekomme "dial tcp 127.0.0.1: 3306: connect: kann die angeforderte Adresse nicht zuweisen", wenn mehrere gleichzeitige Goroutinen verwendet werden

Erstellt am 17. Jan. 2019  ·  3Kommentare  ·  Quelle: go-sql-driver/mysql

Fehlerbeschreibung

Ich habe nach einiger Zeit "dial tcp 127.0.0.1: 3306: connect: Kann angeforderte Adresse nicht zuweisen" erhalten, wenn ich mehrere gleichzeitige Goroutinen verwende:

  • Bei Verwendung von 8 gleichzeitigen Goroutinen => alles in Ordnung
  • Bei Verwendung mehrerer Goroutinen => nach ca. 15s scheitert jede Anfrage mit err="dial tcp 127.0.0.1:3306: connect: kann angeforderte Adresse nicht zuweisen". Etwa 35 000 Anfragen wurden vor dem ersten Fehlschlag erfolgreich durchgeführt.

Sieht so aus, als ob der SQL-Treiber keinen neuen Port abrufen kann, um eine neue Verbindung herzustellen, aber wenn ja, verstehe ich nicht, warum er keine vorhandene Verbindung aus dem Pool wiederverwendet?

Ich habe die folgenden DBStats, wenn der Fehler auftritt:
(sql.DBStats) {
MaxOpenConnections: (int) 0,
OpenConnections: (int) 64,
InUse: (int) 64,
Leerlauf: (int) 0,
WaitCount: (int64) 0,
WaitDuration: (time.Duration) 0s,
MaxIdleClosed: (int64) 28252,
MaxLifetimeClosed: (int64) 0
}

Ich verwende go-sql-driver V1.4.1 mit go 1.11.2, um eine lokal als Docker-Container laufende mariaDB zu erreichen.
Im folgenden Beispiel habe ich die "Panik" hinzugefügt, nur um nicht von einer Reihe ähnlicher Fehler überflutet zu werden.

Beispielcode

// 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

Fehlerprotokoll

{"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

Aufbau

*go-sql-Treiber V1.4.1

*Go-Version: Go-Version go1.11.2 linux/amd64

*MariaDB 10.4.1 im Docker-Container

Server-Betriebssystem: zB Debian 8.1 (Jessie), Windows 10

Hilfreichster Kommentar

Versuche dies.

db.SetMaxIdleConns(64)
db.SetMaxOpenConns(64)
db.SetConnMaxLifetime(time.Minure)

Alle 3 Kommentare

Versuche dies.

db.SetMaxIdleConns(64)
db.SetMaxOpenConns(64)
db.SetConnMaxLifetime(time.Minure)

Vielen Dank @methan für deine sehr schnelle Antwort, Versuch ist erfolgreich!
Ich bin immer noch ein bisschen überrascht, dass die Standardwerte nicht richtig funktionieren und ich verstehe nicht warum, aber Sie haben mein Problem tatsächlich gelöst.

Siehe diesen Artikel.
http://techblog.en.klab-blogs.com/archives/31093990.html

Alle Bilder im Artikel sind verschwunden. Sie sind in der japanischen Version des Artikels lebendig.

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

jaysonShao picture jaysonShao  ·  3Kommentare

mayurshivakumar picture mayurshivakumar  ·  5Kommentare

julienschmidt picture julienschmidt  ·  7Kommentare

tbdingqi picture tbdingqi  ·  7Kommentare

pmoosman picture pmoosman  ·  9Kommentare