拋磚系列之redis監控命令( 二 )


Pub/sub mode【發布訂閱模式】redis-cli可以用來發布/訂閱消息,如果你的系統中使用了redis的發布訂閱功能,可以使用redis-cli的這一特性來進行一些調試工作 。
比如,使用redis-cli發布一條消息到mychannel
redis-cli publish mychannel helloworld同樣的,使用redis-cli訂閱mychannel發來的消息
redis-cli subscribe mychannelReading messages... (press Ctrl-C to quit)1) "subscribe"2) "mychannel"3) (integer) 11) "message"2) "mychannel"3) "helloworld"Monitoring the latency of Redis instances【監控延遲】 redis常用來構建延遲敏感的應用,延遲涉及多個環節,客戶端到網絡層之間,網絡層到redis之間,redis自身處理等 。
redis-cli提供了多種工具幫助我們發現延遲,涉及的指標有最小值、最大值、平均值、延遲分布情況等 。
基本的延遲檢查工具是redis-cli --latency 。使用--latency,redis-cli 運行一個循環,以每秒100次的速度向redis發送PING命令,并測量收到回復的時間,統計信息在控制臺中實時更新 。
# redis-cli --latencymin: 0, max: 3, avg: 0.28 (536 samples)統計數據以毫秒為單位,上面的測試一共發了536個PING命令,最小響應時間為0毫秒(0不代表沒有延遲,只是說毫秒統計不到),最大為3毫秒,平均值為0.28毫秒 。
有時我們更希望看到redis延遲變化的趨勢,這時--latency-history就可以派上用?。?它的工作機制和--latency相同 , 只是每15秒(默認)重新開啟一個測試會話 。
redis-cli --latency-historymin: 0, max: 7, avg: 0.25 (1432 samples) -- 15.00 seconds rangemin: 0, max: 1, avg: 0.24 (1435 samples) -- 15.00 seconds rangemin: 0, max: 15, avg: 0.27 (1429 samples) -- 15.01 seconds rangemin: 0, max: 5, avg: 0.28 (1431 samples) -- 15.01 seconds rangemin: 0, max: 5007, avg: 7.71 (839 samples) -- 15.01 seconds rangemin: 1, max: 18, avg: 3.58 (1092 samples) -- 15.01 seconds rangemin: 0, max: 13, avg: 3.56 (1093 samples) -- 15.01 seconds rangemin: 1, max: 15, avg: 3.61 (1090 samples) -- 15.00 seconds rangemin: 1, max: 17, avg: 3.60 (1091 samples) -- 15.01 seconds rangemin: 0, max: 26, avg: 2.57 (1178 samples) -- 15.00 seconds range可以看到,上面每隔15秒輸出一組數據 , 在第5個15秒開始時耗時明顯增加 。
內部還實現了另一個非比尋常的延遲檢測工具 , 它不檢查 Redis 實例的延遲,而是檢查運行的計算機的延遲,此延遲是內核計劃程序、虛擬機管理程序(如果是虛擬化實例)等所固有的 。
redis稱之為內在延遲,因為它對程序員來說基本上是不透明的,如果 redis 實例具有高延遲,檢查其他因素之外,還值得檢查內核本身的延遲 。
通過測量內在延遲 , 我們就知道這是基準 , redis 無法超越內核,使用redis-cli --intrinsic-latency <持續時間>開啟測試,持續時間5秒 。
redis-cli --intrinsic-latency 5Max latency so far: 1 microseconds.Max latency so far: 16 microseconds.Max latency so far: 70 microseconds.Max latency so far: 109 microseconds.Max latency so far: 145 microseconds.Max latency so far: 205 microseconds.Max latency so far: 283 microseconds.Max latency so far: 363 microseconds.Max latency so far: 2507 microseconds.Max latency so far: 4541 microseconds.100063828 total runs (avg latency: 0.0500 microseconds / 49.97 nanoseconds per run).Worst run took 90878x longer than the average latency.# redis-cli --intrinsic-latency 5Max latency so far: 1 microseconds.Max latency so far: 39 microseconds.Max latency so far: 41 microseconds.Max latency so far: 45 microseconds.Max latency so far: 62 microseconds.Max latency so far: 8839 microseconds.Max latency so far: 9357 microseconds.Max latency so far: 10310 microseconds.Max latency so far: 10322 microseconds.Max latency so far: 10573 microseconds.Max latency so far: 10682 microseconds.Max latency so far: 11177 microseconds.Max latency so far: 11514 microseconds.35539207 total runs (avg latency: 0.1407 microseconds / 140.69 nanoseconds per run).Worst run took 81840x longer than the average latency.注意:--intrinsic-latency只能在redis實例所在機器運行 。
從上面的輸出可以看到內核的最大延遲達到了11514微秒(115毫秒左右),也從側面說明執行redis命令的最大延遲起碼在115毫秒之上 。
Replica mode【副本模式】 副本模式是一項高級功能,對 redis 開發人員調試操作非常有用,它可以監控到主節點在復制流中發送到其副本的內容,使用redis-cli --replica開啟監控 。redis-cli --replicasending REPLCONF capa eofsending REPLCONF rdb-filter-onlySYNC with master, discarding bytes of bulk transfer until EOF marker...SYNC done after 211 bytes. Logging commands from master.sending REPLCONF ACK 0"ping""SELECT","0""set","a","b""hset","hash","name","jack"可以看到主節點上執行了set,hset等指令,命令行實時輸出 。

推薦閱讀