1. ホーム
  2. データベース
  3. モンゴルディーブ

mongodbでコネクションとログをクリアする正しい方法

2022-01-19 15:46:23

前置き

最近、並行処理をやっていて、サーバーが動かなくなった。

pymongoがmongodbで作成したtcp接続を完全にクローズアウトできず、mongoの接続が自動的に解放される前に高頻度で接続を行い、接続数が爆発的に増加していることが原因のような気がします。

そこで、これを記録し、共有するために作成されたコネクションをクリアします。

MongoDBの接続情報を表示する

db.serverStatus().connections


current 現在の接続数

available 利用可能な接続数

connection.totalCreated サーバーに作成されたすべての着信接続のカウント。この数には、クローズされた接続も含まれます。

現在のCurrentOpを全てクリアします。

var ops = db.currentOp().inprog;
for(i = 0; i < ops.length; i++){
        var opid = ops[i].opid;
        db.killOp(opid);
        print("Stopping op ... #"+opid)
};


上記のコマンドは、現在の接続を閉じるものではありません

カレントを閉じる方法1。

現在のすべてのtcp接続を表示します。

netstat -nat | grep '27017' です。

指定したポートのプロセス番号を表示する

netstat -tpna | grep :35522

その後、プロセスを終了させます。

kill -9 14335

db-shellに戻り、カレントが閉じられたことを確認します。

この方法でオフにしたtcp接続の状態はTIME_WAITになり、私たちのアクティブなシャットダウンによってACKが送信されるため、ポートはまだ占有されている状態です。

しかし幸運なことに、通常しばらくするとリンクは自動的に解放され、ポートはもう占有されなくなります。

35522と35524の両方がリリースされたことがわかります。

電流を閉じる方法2。

pythonプログラムなど、どのプログラムがmongodbに接続しているのかが分かっている場合

というコマンドを使えば、そのプログラムがいくつのポートを占有しているかを確認することができます。

ps -aux | grep python

次に、対応する Python プログラム run.py を kill して、カレントのクリアも行います。

指定されたプログラムを一括してクリーニングします。

ps -efww|grep -w "run.py" |grep -v grep|cut -c 9-15|xargs kill -9


ログ

ログの場所を見る

cat /etc/mongod.conf


ログファイルが大きすぎてvimで表示できません。tailで最後の100行を表示します。

tail -n 100 mongo.log


サービスを再起動せずに新しいログファイルを開き直す方法

use admin
db.runCommand({logRotate:1})


実行中にログファイルを削除しないコマンド、ログファイルを空にするが、ファイルは削除しない(削除後のログは生成されない)。

: >run.log


また、ローテーションログを使用することもできます ログローテート : ログをスライスして使用します。

重複排除スクリプト

db.getCollection('collectionName').aggregate([{$group:{_id:{'de-duplicatedField':'$de-duplicatedField'}, count:{$sum:1}, dups:{$addToSet: '$_id'}},{$match:{count:{$gt:1}} ] ,{ allowDiskUse: true }).forEach(function(doc){doc.dups.shift();db.getCollection('collection name').remove({_id: {$in: doc.dups}});})


データの書き出し

mongoexport -h localhost:27017 -u username -p password -d ライブラリ名 -c コレクション名 -o エクスポートファイルパス

概要

mongodb clearing connection and logsについては、この記事がすべてです。mongodb clearing connection and logsについては、Script Houseの過去記事を検索するか、引き続き以下の関連記事を閲覧してください。