حصلت على "اطلب tcp 127.0.0.1:3306: connect: لا يمكن تعيين العنوان المطلوب" بعد مرور بعض الوقت ، عند استخدام goroutines متعددة متزامنة:
يبدو أن مشغل SQL لا يمكنه الحصول على منفذ جديد لإنشاء اتصال جديد ، ولكن إذا كان الأمر كذلك ، فأنا لا أفهم لماذا لا يعيد استخدام اتصال موجود من التجمع؟
لدي DBStats التالية عند حدوث الخطأ:
(sql.DBStats) {
MaxOpenConnections: (int) 0 ،
OpenConnections: (int) 64 ،
مستخدم: (int) 64 ،
خامل: (int) 0 ،
WaitCount: (int64) 0 ،
مدة الانتظار: (time.Duration) 0s،
MaxIdleClosed: (int64) 28252 ،
MaxLifetime مغلق: (int64) 0
}
أستخدم go-sql-driver V1.4.1 مع go 1.11.2 ، للوصول إلى mariaDB يعمل محليًا كحاوية رصيف.
أنا المثال أدناه أضفت "الذعر" فقط حتى لا تغمرها مجموعة من الأخطاء المماثلة.
// 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
{"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
* go-sql-driver V1.4.1
* إصدار Go: go version go1.11.2 linux / amd64
* MariaDB 10.4.1 في حاوية الرصيف
نظام تشغيل الخادم: على سبيل المثال Debian 8.1 (Jessie) و Windows 10
جرب هذا.
db.SetMaxIdleConns (64)
db.SetMaxOpenConns (64)
db.SetConnMaxLifetime (time.Minure)
شكرًا جزيلاً methane على
ما زلت مندهشًا بعض الشيء من أن القيم الافتراضية لا تعمل بشكل صحيح ولا أفهم لماذا ولكنك قمت بالفعل بحل مشكلتي.
انظر هذا المقال.
http://techblog.en.klab-blogs.com/archives/31093990.html
اختفت جميع الصور في المقال. إنهم على قيد الحياة في النسخة اليابانية من المقال.
http://dsas.blog.klab.org/archives/2018-02/configure-sql-db.html
التعليق الأكثر فائدة
جرب هذا.
db.SetMaxIdleConns (64)
db.SetMaxOpenConns (64)
db.SetConnMaxLifetime (time.Minure)