一行shell檢視redis 連線數分布

2021-09-08 13:27:29 字數 1601 閱讀 2353

背景

線上某個redis連線數過萬,老報警,於是產生剛需:快速知道某個redis的client分布. 

用於快速找出連線數占用最多的客戶端.

shell

習慣python的老司機處理這點小事,那還不是手到擒來.可是偶爾不也想裝個逼,用shell麼?

先上**,接著解讀

#!/bin/bash

host=$1 

port=$2

echo $host: $port 

redis-cli -h $host -p $port client list | awk ''| 

cut -d = -f 2| cut -d : -f 1 | sort | uniq -c | sort -rn | 

awk ''| awk ''

舉例子:

./redis-cli -h 195.203.6.51 -p 6379 -a key@creditcard client list | awk ''| cut -d = -f 2| cut -d : -f 1 | sort | uniq -c | sort -rn | awk ''| awk ''
此行較長,csdn顯示有問題,請複製該行,獲取**

解讀首先是redis-cli的client list命令列出所有client資訊. 

注意:如果client數特別多,可能超過輸出長度限制 

每一行輸出資訊如下: 

id=2 addr=127.0.0.1:49759 fd=5 name= age=5471 idle=5455 flags=n db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get

接著是awk輸出第二列addr=127.0.0.1:49759

接著是cut命令,-d =指定以=分隔, -f 2獲取分隔後的第二列,也就是127.0.0.1:49759

同上,繼續cut,:分隔,取第一列127.0.0.1(客戶端ip) 

感覺這兩個cut可以合二為一

接著sort排序

接著uniq -c去重計數,統計出每個ip多少個鏈結

接著sort -rn按連線數排個倒序.結果如下

160 10.83.72.99 

142 10.83.80.63 

141 10.83.73.112 

140 10.83.80.101 

140 10.83.203.68 

139 10.83.73.118 

139 10.83.212.136 

135 10.83.225.53 

135 10.83.225.33 

132 10.83.80.103 

132 10.83.225.52 

128 10.83.225.32 

128 10.83.225.31 

125 10.83.73.89 

125 10.83.200.53 

123 10.83.72.217 

16 127.0.0.1

這個時候已經知道那些客戶端占用連線數最多了,但是顯示的是ip,不直觀,能不能把ip那一列換成網域名稱或者說主機名呢?

一行shell檢視redis 連線數分布

線上某個redis連線數過萬,老報警,於是產生剛需 快速知道某個redis的client分布.用於快速找出連線數占用最多的客戶端.習慣python的老司機處理這點小事,那還不是手到擒來.可是偶爾不也想裝個逼,用shell麼?先上 接著解讀 bin bash host 1 port 2 echo ho...

shell 遍歷文字每一行

參考文章 shell指令碼 逐行處理文字檔案 這種方式處理時,如果在迴圈內操作全域性變數,超過迴圈作用域後,對全域性變數的操作就會失效。比如把每一行文字新增到乙個全域性陣列,在迴圈內陣列新增的元素是正常的,在迴圈外陣列的元素會恢復到迴圈之前的狀態 cat data.dat while read li...

做一行愛一行

2013年9 月30日13 04 34 地點 公司 筆者 小菜 it界高手很多,謙虛進步自己 目前適合 android iphone 在除錯階段 內容 今天是九月的最後一天了,也沒有太多的心思的編寫 了,看看這個月的工作效率,確實不是很高。最近也在看一本書,可能很多的博友都知道這本書的 程式設計師你...