Zu viele geöffnete Dateien in mgo Go Server
Bei Auftreten des Fehlers „Accept-Fehler: Accept TCP [::]:80: Accept4 : too much open files“ in einem in Go mit mgo geschriebenen MongoDB-Server zeigt an, dass die maximale Anzahl gleichzeitiger Dateideskriptoren erreicht wurde. Dieser Fehler deutet darauf hin, dass möglicherweise bei jeder Anfrage etwas geöffnet und nicht geschlossen wird.
Lösung
Das grundlegende Problem liegt in der falschen Verwendung von MongoDB-Verbindungen. Anstatt eine mgo.Database-Instanz zu speichern, ist es wichtig, eine mgo.Session zu speichern. Erwerben Sie bei der Interaktion mit MongoDB immer eine Kopie oder einen Klon der Sitzung und schließen Sie diese sorgfältig, wenn Sie sie nicht benötigen. Dieser Ansatz stellt sicher, dass Verbindungen nicht verloren gehen.
Darüber hinaus ist es wichtig, alle Datenbankvorgänge gründlich auf Fehler zu prüfen. Das Drucken oder Protokollieren von Fehlern ist der Mindestschritt, der ausgeführt werden muss, wenn ein Fehler auftritt.
Codebeispiel
Unten finden Sie ein verbessertes Codebeispiel, das diese Probleme behebt:
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 }
Durch die Implementierung dieser Änderungen verwaltet der Code Verbindungen effektiv und stellt sicher, dass sie ordnungsgemäß geschlossen werden. Dadurch wird das Problem zu vieler geöffneter Dateien behoben und die Gesamtleistung des MongoDB-Servers verbessert.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich auf meinem Go MongoDB-Server die Fehlermeldung „Accept error: Accept tcp [::]:80: Accept4: too much open files'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!