Erreur de trop nombreux fichiers ouverts dans MongoDB avec MGO
Lors de l'exécution d'un serveur MongoDB écrit en Go à l'aide de MGO, les utilisateurs peuvent rencontrer l'erreur suivante dans les logs :
Accept error: accept tcp [::]:80: accept4: too many open files;
Cette erreur indique que le système a atteint son nombre maximum d'ouvertures fichiers.
Causes
Le problème survient lorsque les connexions au serveur MongoDB ne sont pas correctement fermées. Chaque requête adressée au serveur ouvre généralement une connexion, et si les connexions ne sont pas fermées après utilisation, elles s'accumulent, atteignant finalement la limite maximale.
Solutions
1. Fermer les connexions MongoDB :
Pour résoudre ce problème, il est crucial de fermer les connexions MongoDB rapidement après utilisation. L'approche recommandée est :
2. Vérifier le type de session :
Assurez-vous que la session stockée est de type mgo.Session et non mgo.Database. Ceci est important car le type mgo.Session gère la gestion des connexions.
3. Rechercher les erreurs :
Il est essentiel de vérifier les erreurs chaque fois que vous interagissez avec MongoDB. Si une erreur se produit, gérez-la avec élégance (par exemple, enregistrez-la ou imprimez-la), car négliger les erreurs peut entraîner un comportement incohérent.
4. Exemple de code :
Voici une version corrigée du code qui inclut une gestion appropriée des sessions :
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 result bson.M if err := c.FindId("someTileID").One(&result); err != nil { // Handle error, e.g.: log.Printf("Tile with ID not found: %v, err %v", "someTileID", err) http.NotFound(w, r) return } // Do something with result }
Questions connexes
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!