mongodbでコネクションとログをクリアする正しい方法
前置き
最近、並行処理をやっていて、サーバーが動かなくなった。
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の過去記事を検索するか、引き続き以下の関連記事を閲覧してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
macシステムでのmongoDBデータベースのインストールと設定
-
2021年最新版Windows 10システムMongoDBデータベースインストールと構成環境
-
MongoDBのメモリ管理関連まとめ
-
MongoDBのレンジスライスキーとハッシュスライスキーについて説明します。
-
Navicat Premiumでmongodbと接続する詳細チュートリアル
-
mongodb フィールド値自己増殖型実装コード
-
MongoTemplateのidによるクエリがNULLの場合について
-
mongosのクラッシュ後に再起動できない問題の解決法
-
MongoDB起動時の例外エラーと正しいシャットダウン方法
-
MongoDB総合まとめ