您好,登錄后才能下訂單哦!
小編給大家分享一下mongodb如何清除連接和日志,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
最近在做并發,服務器卡死了。
感覺是pymongo未能完全close掉和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) };
上面的命令無法關閉current連接
查看所有current的tcp連接:
netstat -nat | grep ‘27017'
查看指定端口的進程號
netstat -tpna | grep :35522
然后kill掉該進程
kill -9 14335
再到db-shell中查看,已經關閉一個current了。
這種方式關掉的tcp連接狀態會變成TIME_WAIT,端口依舊被占用,因為ACK是由我們主動關閉發出的。
不過還好的是一般等一段時間鏈接自動會被釋放,端口也不再被占用了。
可以看到35522和35524都已經被釋放。
如果你知道是由哪個程序連接的mongodb,比如python程序
那么可以使用命令查看程序端口占用情況
ps -aux | grep python
然后kill掉對應的python程序,run.py,也能完成current的清除
批量清除指定程序:
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
也可以使用旋轉日志 logRotate :對日志進行切割
db.getCollection('集合名').aggregate([{$group:{_id:{'去重字段':'$去重字段'}, count:{$sum:1}, dups:{$addToSet: '$_id'}}},{$match:{count:{$gt:1}}}] ,{ allowDiskUse: true }).forEach(function(doc){doc.dups.shift();db.getCollection('集合名').remove({_id: {$in: doc.dups}});})
mongoexport -h localhost:27017 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 -o 導出文件路徑
以上是“mongodb如何清除連接和日志”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。