溫馨提示×

溫馨提示×

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

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

Redis db連接超時怎么辦

發(fā)布時間:2021-12-13 11:38:40 來源:億速云 閱讀:194 作者:小新 欄目:關系型數(shù)據(jù)庫

小編給大家分享一下Redis db連接超時怎么辦,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

問題描述:

現(xiàn)象是redis db訪問出現(xiàn)超時。

問題分析:

網(wǎng)絡流量出現(xiàn)瓶頸,訪問變慢。

  • [machine1 ~]$ ping 192.168.10.66

  • PING 192.168.10.66 (192.168.10.66) 56(84) bytes of data.

  • 64 bytes from 192.168.10.66: icmp_seq=1 ttl=64 time=17.7 ms

  • 64 bytes from 192.168.10.66: icmp_seq=2 ttl=64 time=17.2 ms

  • Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0

  •   Queueing strategy: fifo

  •   Output queue: 0/40 (size/max)

  •   5 minute input rate 874639000 bits/sec, 85931 packets/sec –網(wǎng)絡流量每秒800m bit

  •   5 minute output rate 47017000 bits/sec, 75274 packets/sec

  •      96257027404 packets input, 21537684106526 bytes, 0 no buffer

  •      Received 70287596 broadcasts (69442689 multicasts)

主機的網(wǎng)卡流量也達到了瓶頸。

redis主機的某些實例內(nèi)存也開始報警,超過90%。

停止中間件應用后,發(fā)現(xiàn)問題還是沒有解決,網(wǎng)絡流量依舊很高。

將redis db切換到備機后,系統(tǒng)恢復,網(wǎng)絡流量下降。redis db從庫的內(nèi)存使用率很低。

發(fā)生問題時當時主庫的內(nèi)存最高是14g,但是從庫的內(nèi)存才1.9g。那主庫的內(nèi)存占用是從哪里來的呢?

根據(jù)網(wǎng)絡同事的反饋,網(wǎng)絡請求的大小大概也就幾十個字節(jié),但是輸出的大小每次達到了幾M。

Redis輸出緩沖區(qū)可能占用大量的內(nèi)存空間,這和oracle的pga內(nèi)存非常類似,每個oracle會話會獨立分配一個內(nèi)存區(qū)域。那么繼續(xù)看看本案例是否也是輸出緩沖區(qū)內(nèi)存占用過多。查看zabbix相關指標,發(fā)現(xiàn)client_longest_output_list的確有增加。應該是輸出緩沖區(qū)占用內(nèi)存較大,也就是有大量的數(shù)據(jù)

從Redis服務器向某些客戶端輸出。


查看當時的日志,有omem比較大的情況。

  • id=411550 addr=172.24.1.30:34542 fd=280 name= age=2 idle=1 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=9

  • omem=237928 events=rw cmd=lrange

后續(xù)從slowlog中也發(fā)現(xiàn)有返回數(shù)據(jù)較多的操作。

  • [machine1 ~]$redis-cli -p 6500 slowlog get 10

  • 1) 1) (integer) 2245

  •     2) (integer) 1460002216

  •     3) (integer) 23236

  •     4) 1) "SMEMBERS"

  •        2) "prdkey1"

一次獲取9075多個元素。

  • 127.0.0.1:6410> scard prdkey1

  • (integer) 9075


經(jīng)過和開發(fā)一起分析,類似于Oracle中的數(shù)據(jù)傾斜,redis的某個分片上返回的數(shù)據(jù)很大,導致服務器向客戶端發(fā)送數(shù)據(jù)的buffer的積壓。后續(xù)開發(fā)將這些數(shù)據(jù)分批取出,并放到JVM中進行緩存。

以上是“Redis db連接超時怎么辦”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

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

AI