小編給大家分享一下Redis db連接超時怎么辦,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
目前成都創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管維護、企業(yè)網(wǎng)站設(shè)計、稱多網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。問題描述:
現(xiàn)象是redis db訪問出現(xiàn)超時。
問題分析:
網(wǎng)絡(luò)流量出現(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)絡(luò)流量每秒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%。
停止中間件應(yīng)用后,發(fā)現(xiàn)問題還是沒有解決,網(wǎng)絡(luò)流量依舊很高。
將redis db切換到備機后,系統(tǒng)恢復,網(wǎng)絡(luò)流量下降。redis db從庫的內(nèi)存使用率很低。
發(fā)生問題時當時主庫的內(nèi)存最高是14g,但是從庫的內(nèi)存才1.9g。那主庫的內(nèi)存占用是從哪里來的呢?
根據(jù)網(wǎng)絡(luò)同事的反饋,網(wǎng)絡(luò)請求的大小大概也就幾十個字節(jié),但是輸出的大小每次達到了幾M。
Redis輸出緩沖區(qū)可能占用大量的內(nèi)存空間,這和oracle的pga內(nèi)存非常類似,每個oracle會話會獨立分配一個內(nèi)存區(qū)域。那么繼續(xù)看看本案例是否也是輸出緩沖區(qū)內(nèi)存占用過多。查看zabbix相關(guān)指標,發(fā)現(xiàn)client_longest_output_list的確有增加。應(yīng)該是輸出緩沖區(qū)占用內(nèi)存較大,也就是有大量的數(shù)據(jù)
從Redis服務(wù)器向某些客戶端輸出。
查看當時的日志,有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ù)很大,導致服務(wù)器向客戶端發(fā)送數(shù)據(jù)的buffer的積壓。后續(xù)開發(fā)將這些數(shù)據(jù)分批取出,并放到JVM中進行緩存。
以上是“Redis db連接超時怎么辦”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!