Terlalu Banyak Fail Terbuka dalam Pelayan mgo Go
Apabila menghadapi ralat "Terima ralat: terima tcp [::]:80: accept4 : terlalu banyak fail terbuka," dalam pelayan MongoDB yang ditulis dalam Go menggunakan mgo, ini menunjukkan bahawa bilangan maksimum deskriptor fail serentak mempunyai telah dicapai. Ralat ini menunjukkan bahawa sesuatu berpotensi dibuka dan tidak ditutup pada setiap permintaan.
Penyelesaian
Isu asas terletak pada penggunaan sambungan MongoDB yang salah. Daripada menyimpan contoh mgo.Database, adalah penting untuk menyimpan mgo.Session. Apabila berinteraksi dengan MongoDB, sentiasa dapatkan salinan atau klon sesi dan tutupnya dengan tekun apabila tidak diperlukan. Pendekatan ini memastikan sambungan tidak bocor.
Selain itu, adalah penting untuk menyemak ralat secara menyeluruh dalam semua operasi pangkalan data. Ralat pencetakan atau pengelogan ialah langkah minimum yang perlu diambil apabila ralat berlaku.
Sampel Kod
Di bawah ialah contoh kod yang dipertingkatkan yang menangani isu ini:
var session *mgo.Session func init() { var err error if session, err = mgo.Dial("localhost"); err != nil { log.Fatal(err) } } func someHandler(w http.ResponseWriter, r *http.Request) { sess := session.Copy() defer sess.Close() // Must close! c := sess.DB("mapdb").C("tiles") // Do something with the collection, e.g. var tile bson.M if err := c.FindId("someTileID").One(&result); err != nil { // Tile does not exist, send back error, e.g.: log.Printf("Tile with ID not found: %v, err: %v", "someTileID", err) http.NotFound(w, r) return } // Do something with tile }
Dengan melaksanakan pengubahsuaian ini, kod menguruskan sambungan dengan berkesan dan memastikan ia ditutup dengan betul. Ini menyelesaikan isu terlalu banyak fail terbuka dan meningkatkan prestasi keseluruhan pelayan MongoDB.
Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Ralat Terima: terima tcp [::]:80: accept4: terlalu banyak fail terbuka' dalam Pelayan Go MongoDB saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!