MGO を使用した MongoDB でオープン ファイルが多すぎるエラー
MGO を使用して Go で記述された MongoDB サーバーを実行すると、次のエラーが発生する場合がありますログ:
Accept error: accept tcp [::]:80: accept4: too many open files;
このエラーは、システムが最大数に達したことを示します
原因
この問題は、MongoDB サーバーへの接続が適切に閉じられていない場合に発生します。通常、サーバーへのリクエストごとに接続が開かれ、使用後に接続が閉じられないと接続が蓄積され、最終的には最大制限に達します。
ソリューション
1. MongoDB 接続を閉じる:
この問題を解決するには、使用後ただちに MongoDB 接続を閉じることが重要です。推奨されるアプローチは次のとおりです。
2.セッション タイプの確認:
保存されたセッションのタイプが mgo.Database ではなく mgo.Session であることを確認します。 mgo.Session タイプが接続管理を処理するため、これは重要です。
3.エラーのチェック:
MongoDB と対話するときは常にエラーをチェックすることが不可欠です。エラーが発生した場合は、エラーを無視すると一貫性のない動作が発生する可能性があるため、適切に処理してください (ログに記録するか印刷するなど)。
4.コード例:
これは、適切なセッション管理を含むコードの修正バージョンです:
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 }
関連質問
以上がGo の MGO を使用して MongoDB の「開いているファイルが多すぎます」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。