中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis崩了,我成功把鍋甩給了隔壁組

發布時間:2020-08-19 22:19:39 來源:網絡 閱讀:292 作者:wx5d6cccb1cb158 欄目:編程語言

項目起不來了!

... 項目又起不來了!

... 又雙叒叕???!!!

上周經常聽到組里同事說項目又雙叒叕掛了, Redis連不上, 筆者在另一套正常的環境忙著開發新需求, 沒空關心這個問題.(PS: 反正我的環境能用(′???)σ , 先忙完我的再說).

于是乎, 看了一眼日志, 連接數過多... emmm, 順手幫同事把Redis配置里連接數上限加了個0, 問題排查什么的等忙完再說.

ERR max number of clients reached

終于... 該來的總逃不掉, 筆者用的環境也被搞崩了, 而且是莫名其妙地就涼了.

不過... 因吹斯汀 !
Redis崩了,我成功把鍋甩給了隔壁組

修改連接數上限畢竟治標不治本, 本來連接數上限就是10000, 微服務總共才幾十個, 按理說根本用不完.

肯定有人沒關連接, 查他.
Redis崩了,我成功把鍋甩給了隔壁組

已知:

Redis服務重啟后, 用一段時間連接就又滿了. 服務總共幾十個, 配置的一萬連接數正常情況下不大可能用完.

第一步 重啟并搶先占一個連接
筆者重啟了Redis后, 立即連接到Redis, 查看客戶端數量(晚了就連不上了):

$ docker exec -it $(docker ps | grep redis | awk '{print $1}') redis-cli -a {pwd}
127.0.0.1:6379> info
...
# Clients
connected_clients:391
...

tips:

info命令能查看關于 Redis 服務器的各種信息和統計數值.

第二步 記錄全部客戶端
幾分鐘后再次查看:

127.0.0.1:6379> info
...
# Clients
connected_clients:10002
...

此時, 連接已經被全部占滿了.
Redis崩了,我成功把鍋甩給了隔壁組

將全部客戶端信息保存到文件準備抓出這個搞事情的老哥.

127.0.0.1:6379> client list
id=7863 addr=172.18.0.104:56836 fd=6150 name= age=72 idle=72 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
id=7864 addr=172.18.0.50:56262 fd=6151 name= age=72 idle=72 flags=N db=9 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
id=7865 addr=172.18.0.104:56840 fd=6152 name= age=72 idle=72 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
...

Redis崩了,我成功把鍋甩給了隔壁組

ips:

client list: 列出全部客戶端信息.

第三步 找出異常IP
有了全部的客戶端連接信息, 就能找出到底是誰的鍋了. 使用命令輸出連接數前五的IP:

$ cat client-list | awk '{print $2}' | awk -F "[=:]" '{print $2}' | sort | uniq -c | sort -k1,1nr | head -5
5432 172.18.0.50
4244 172.18.0.104
  43 172.18.0.59
  40 172.18.0.54
  32 172.18.0.55
到目前為止, 鎖定了172.18.0.50和172.18.0.104兩個IP. 這兩個都是docker內部網絡的地址.

tips:

awk '{print $2}: 輸出第二列, 即IP. addr=172.18.0.104:56836.

awk -F "[=:]" '{print $2}': 通過等號和冒號拆分addr=172.18.0.104:56836, 并輸出中間的IP.

sort: 排序.

uniq -c: 統計數量并在每列旁邊顯示該行重復出現的次數.

第四步 定位服務并把鍋扔過去
拿到了IP就離目標不遠了, 通過docker inspect能輸出docker實例的信息, 其中就包括IP.

$ docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) | grep 172.18.0.50
/docker_xxxxx-service - 172.18.0.50
$ docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) | grep 172.18.0.104
/docker_yyyyy-service - 172.18.0.104

tips:

docker inspect: 獲取容器/鏡像的元數據. --format: 用模板格式化輸出.

至此, 定位到了xxxxx和yyyyy,嗯... 隔壁Py (thon)組的服務. 來, 鍋給你.
Redis崩了,我成功把鍋甩給了隔壁組

如果這篇文章對您有幫助,請幫忙點贊一下吧 ( ̄▽ ̄)"

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳山县| 德阳市| 玉山县| 柯坪县| 新疆| 淮阳县| 固安县| 夏津县| 通州区| 中超| 永济市| 绥滨县| 三门峡市| 延安市| 五家渠市| 涟源市| 丰顺县| 台中市| 沙河市| 漳州市| 翼城县| 讷河市| 彭泽县| 日土县| 乌恰县| 池州市| 南丰县| 罗城| 富顺县| 平武县| 集贤县| 彭水| 金溪县| 广平县| 津市市| 法库县| 双流县| 武乡县| 东乡县| 隆昌县| 津南区|