1.查看服務器線程運行狀態
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.currentOp());"
當發現secs_running這個字段的值較大並且嚴重阻塞了系統其它線程運行的時候可以先把使用db.killOp(opid)將其kill掉,然後針對這個鏈接執行的query進行優化。
在一個正在運行的mongodb服務器內部是有很多鏈接,直接執行db.currentOp()會將所有鏈接的信息都打印出來,這不便於找出有問題的鏈接,所以必須都db.currentOp()輸出的信息做處理.
以下是一些信息處理腳本
找出運行時間超過200ms的鏈接信息
mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();db.currentOp(true).inprog.forEach(function(doc){if(doc.active==true&& doc.secs_running>200){printjson(doc)}});"
如果只需要打出這些鏈接的某個字段可以直接用print
mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();db.currentOp(true).inprog.forEach(function(doc){if(doc.active==true&& doc.secs_running>200){printjson(doc.opid)}});"
打印客戶端信息
mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();db.currentOp(true).inprog.forEach(
function(opDoc){
if(opDoc.client)
printjson(opDoc.client)
}
);"
還可以獲取當前操作中,已停止活動並且操作行爲爲query的信息
mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();db.currentOp(true).inprog.forEach(
function(opDoc){//opDoc其實是返回的每個op操作對象
if(!opDoc.active&&opDoc.op=='query')
printjson(opDoc)
}
);"
還可以獲取當前操作中,正在進行中並且操作行爲爲query的信息
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();db.currentOp(true).inprog.forEach(
function(opDoc){//opDoc其實是返回的每個op操作對象
if(opDoc.active&&opDoc.op=='query')
printjson(opDoc)
}
);"
查看數據庫payDB的信息:
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.currentOp());"
查看連接數
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().connections);"
把所有在等待鎖的操作顯示出來:
mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();db.currentOp().inprog.forEach(function(item){if(item.waitingForLock)print(JSON.stringify(item))});"
鎖信息
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().locks);"
全局鎖信息
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().globalLock
);"
內存信息
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().mem
);"
索引統計
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().indexCounters);"
網絡
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().network);"
複製集
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().repl
);"
複製集判斷哪個IP是primary
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().repl
);" | grep primary
操作計數器
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().opcounters
);"
Journal(dur)持久性
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin payDB -eval"rs.slaveOk();printjson(db.serverStatus().dur
);"
查看oplog信息:
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin local -eval "rs.slaveOk();printjson(db.oplog.rs.stats()
);"
這個IP不用修改這是primary
查看master 的oplog元數據信息:
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin admin -eval"rs.slaveOk();printjson(db.printReplicationInfo()
);"
修改成任意IP
查看slave的同步狀態-延遲:
$ mongo --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin local -eval"rs.slaveOk();printjson( db.printSlaveReplicationInfo()
);"
命令用於追蹤數據庫實例的實時運行狀況
mongostat --host=<IP Addr> --port=<PORT> -u mongo_monitor -p"<PASSWORD>" --authenticationDatabase admin