MongoDB多緯度監控方法詳解

1、mongostat工具方法java

mongostat是mongdb自帶的狀態檢測工具,在命令行下使用。它會間隔固定時間獲取mongodb的當前運行狀態,並輸出。若是你發現數據庫忽然變慢或者有其餘問題的話,你第一手的操做就考慮採用mongostat來查看mongo的狀態。sql

mongostat命令參數mongodb

--help     :      查看幫助信息數據庫

--version :        查看mongodb版本號服務器

--host :           要鏈接的主機同時也能夠指定端口架構

--port :         若是—host不指定端口在這單獨指定併發

--sslCAFile :      指定對應的CA密鑰位置app

--username :      用戶分佈式

--password :    密碼ide

mongostat命令基本格式

mongostat --rowcount 2 1  --host 192.168.0.8:27027

輸出參數說明

inserts/s : 每秒插入次數

query/s :每秒查詢次數

update/s :每秒更新次數

delete/s :每秒刪除次數

getmore/s :每秒執行getmore次數

command/s :每秒的命令數,比以上插入、查找、更新、刪除的綜合還多,還統計了別的命令

flushs/s :每秒執行fsync將數據寫入硬盤的次數。

mapped/s :全部的被mmap的數據量,單位是MB,

vsize :虛擬內存使用量,單位MB

res :物理內存使用量,單位MB

faults/s :每秒訪問失敗數(只有Linux有),數據被交換出物理內存,放到swap。不要超過100,不然就是機器內存過小,形成頻繁swap寫入。此時要升級內存或者擴展

locked % :被鎖的時間百分比,儘可能控制在50%如下吧

idx miss % :索引不命中所佔百分比。若是過高的話就要考慮索引是否是少了

q t|r|w :當Mongodb接收到太多的命令而數據庫被鎖住沒法執行完成,它會將命令加入隊列。這一欄顯示了總共、讀、寫3個隊列的長度,都爲0的話表示mongo毫無壓力。高併發時,通常隊列值會升高。

ar    :     活躍客戶執行寫操做的數量。

conn :當前鏈接數

time :時間戳

歡迎歡迎學Java的朋友們加入java架構交流: 855835163 一塊兒學習交流

2、mongo內置函數方法

db.stat()函數

獲取當前數據庫的信息,好比Obj總數、數據庫總大小、平均Obj大小等

> use test
switched to db test
> db.stats()
{
   "collections" : 9,
   "objects" : 4278845,
   "avgObjSize" : 224.56603031892953,
   "dataSize" : 960883236,
   "storageSize" : 1195438080,
   "numExtents" : 59,
   "indexes" : 13,
   "indexSize" : 801931264,
   "fileSize" : 6373244928,
   "ok" : 1
}

 

輸出參數說明

collections : 表示當前數據庫有多少個collections.能夠經過運行show collections查看當前數據庫具體有哪些collection.

objects: 表示當前數據庫全部collection總共有多少行數據。顯示的數據是一個估計值,並非很是精確。

avgObjSize :表示每行數據是大小,也是估計值,單位是bytes

 「dataSize」 : 468,表示當前數據庫全部數據的總大小,不是指佔有磁盤大小。單位是bytes

storageSize : 13312,表示當前數據庫佔有磁盤大小,單位是bytes,由於mongodb有預分配空間機制,爲了防止當有大量數據插入時對磁盤的壓力,所以會事先多分配磁盤空間。

numExtents : 彷佛沒有什麼真實意義。我弄明白以後再詳細補充說明。

indexes : 表示system.indexes表數據行數。

indexSize : 表示索引佔有磁盤大小。單位是bytes

fileSize : 表示當前數據庫預分配的文件大小,例如test.0,test.1,不包括test.ns。

db.serverStatus()函數

獲取服務器的狀態

{
   "version" : "1.6.5",
   "uptime" : 7208469,
   "uptimeEstimate" : 7138829,
   "localTime" : "Wed Oct 26 2011 22:23:07 GMT+0800 (CST)",
   "globalLock" : {
       "totalTime" : 7208469556704,
       "lockTime" : 4959693717,
       "ratio" : 0.000688036992871448,
       "currentQueue" : {
           "total" : 0,
           "readers" : 0,
           "writers" : 0
       }
   },
   "mem" : {
       "bits" : 64,
       "resident" : 3131,
       "virtual" : 6172,
       "supported" : true,
       "mapped" : 4927
   },
   "connections" : {
       "current" : 402,
       "available" : 2599
   },
   "extra_info" : {
       "note" : "fields vary by platform",
       "heap_usage_bytes" : 832531920,
       "page_faults" : 8757
   },
   "indexCounters" : {
       "btree" : {
           "accesses" : 2821726,
           "hits" : 2821725,
           "misses" : 1,
           "resets" : 0,
           "missRatio" : 3.543930204420982e-7
       }
   },
   "backgroundFlushing" : {
       "flushes" : 120133,
       "total_ms" : 73235923,
       "average_ms" : 609.6236920746173,
       "last_ms" : 1332,
       "last_finished" : "Wed Oct 26 2011 22:22:23 GMT+0800 (CST)"
   },
   "cursors" : {
       "totalOpen" : 0,
       "clientCursors_size" : 0,
       "timedOut" : 238392
   },
   "repl" : {
       "ismaster" : true
   },
   "opcounters" : {
       "insert" : 269351,
       "query" : 19331151,
       "update" : 14199331,
       "delete" : 1,
       "getmore" : 145575,
       "command" : 55982302
   },
   "asserts" : {
       "regular" : 0,
       "warning" : 0,
       "msg" : 0,
       "user" : 27,
       "rollovers" : 0
   },
   "ok" : 1
}

 

輸出參數說明

Host : 運行實例所監聽的IP與端口

version : 當前實例所使用的版本

Process : 當前實例是mongod,仍是mongos

Uptime : 實例連續正常運行時間,單位秒

uptimeEstimate : 基於mongodb內部粗粒定時器的連續正常運行時間

globalLock.totalTime : 自實例啓動全局鎖建立以來到如今多長時間,單位微秒.

globalLock.lockTime : 自全局鎖建立以來鎖定總時間,單位微秒

globalLock.ratio : 鎖定的時間所佔的比例(lockTime/ totalTime)

globalLock.currentQueue.total : 當前等待全局鎖的數量

globalLock.currentQueue.readers : 當前等待讀鎖的數量

globalLock.currentQueue.writers : 當前等待寫鎖的數量

globalLock.activeClients.total : 鏈接到當前實例處於活動狀態的客戶端數量。

globalLock.activeClients.readers : 處於活動狀態的客戶端中有多少是在執行read操做

globalLock.activeClients.writers : 處於活動狀態的客戶端中有多少是在執行write操做

Mem.resident : 到如今總共使用的物理內存,單位是MB

Mem.virtual : 當前Mongodb實例使用的虛擬內存大小,單位MB,通常狀況下比mem.map的值要超大一點,若是大不少頗有可能發生內存泄露,若是使用journal,大約是2倍的map值

Mem.maped : Mongodb使全部數據都映射到內存中,因此這個值能夠看似整個數據量的值。

Mem.bits : 機器位數,32位或64位

Mem.supported : 本機是否支持內存擴展

Connections.current : 當前鏈接到本機處於活動狀態的鏈接數

Connections. available : 剩餘多少可供鏈接

extra_info. heap_usage_bytes : 當前實例堆大小,單位bytes

extra_info. page_faults : 加載磁盤內容時發生頁錯誤的次數

indexCounters. Btree.accesses : 訪問索引次數

indexCounters. Btree.hits : 訪問索引時,索引在內存中被命中的次數

indexCounters. Btree.misses : 訪問索引時,索引不是在內存中被命中的次數

indexCounters. Btree.resets : 索引計數器被重置的次數

indexCounters. Btree.missRatio : 索引非命中率

backgroundFlushing.flushes : 實例刷新數據到磁盤的數次

backgroundFlushing.total_ms : 刷新到磁盤總共花費的時間,單位毫秒

backgroundFlushing.average_ms : 平均每次刷新執行時間

backgroundFlushing.last_ms : 最後一次刷新執行時間

backgroundFlushing.last_finished : 最後一次刷新完成的時間點

Cursors.totalOpen : 當前遊標數量

Cursors.timeOut : 從實例啓動到如今遊標超時的總數量

Network.bytesIn : 發送到實例的字節大小

Network.bytesOut : 發送出去的字節大小

Repl.setName : replSet結構定義的名稱

Repl.isMaster : 當前實例是不是replSet結構中的Master節點

Repl.secondary : 當前實例是不是replSet結構中的secondary節點

Repl.hosts : replSet結構中每一個節點狀況

Opcounters.insert : 自實例啓動以來,執行insert次數

Opcounters.query : 自實例啓動以來,執行query次數

Opcounters.update : 自實例啓動以來,執行update次數

Opcounters.delete : 自實例啓動以來,執行delete次數

Opcounters.getmore : 自實例啓動以來,在遊標執行getMore次數

Opcounters.command : 自實例啓動以來,執行其餘操做的次數

Asserts.regular : 自實例啓動以來,斷言正常的次數

Asserts.warn : 自實例啓動以來,斷言警告的次數

Asserts.msg : 自實例啓動以來,斷言內部錯誤的次數

Asserts.user : 自實例啓動以來,因用戶使用形成的錯誤而被斷言次數

Asserts.rollovers : 斷言被翻轉的次數

歡迎歡迎學Java的朋友們加入java架構交流: 855835163 羣內提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用本身每一分每一秒的時間來學習提高本身,不要再用"沒有時間「來掩飾本身思想上的懶惰!趁年輕,使勁拼,給將來的本身一個交代!

相關文章
相關標籤/搜索