真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

redis報錯“maxnumberofclientsreached"

    查看redis監(jiān)控的時候看到redis的graph出現(xiàn)不正常的情況,截圖如下:

10年積累的成都做網(wǎng)站、網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計制作后付款的網(wǎng)站建設(shè)流程,更有文水免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

redis報錯“max number of clients reached

    如上面截圖所展示的樣子,可以看到redis 的客戶端連接數(shù)很突兀的上升到10K,又突然下降到0.排除了監(jiān)控本身的原因,很明顯是因為redis本身出了問題。

    進入redis服務(wù)器,連接上去 

      /usr/bin/redis-cli -p 6399 -h 127.0.0.1

      >127.0.0.1:6399>> info

      ERR max number of clients reached

    無論執(zhí)行命令,顯示的都是上面的那個錯誤。這個時候唯一想到的就是redis的客戶端已經(jīng)達到了最大的連接數(shù),無法創(chuàng)建連接了。即redis client可以打開的文件描述符不足

      1.獲取得到redis:6399這個服務(wù)的PID信息

        netstat -tunlp | grep 6399

      2.獲取redis的能夠打開的最大文件描述符

        cat /proc/PID/limints

redis報錯“max number of clients reached

可以看上述截圖中Max open file這行參數(shù)可以看得到進程能夠打開的最大文件描述符

      3.查看進程打開的文件描述符

        方法一:ll /proc/6677/fd | wc -l

        方法二:lsof | grep 6399 | wc -l

        通過上述方法獲取得到的值是10015和10007,可以看得到redis的文件描述符已經(jīng)使用完畢了。

      4.因為redis-cli連接上redis之后無論如何更改出現(xiàn)上面的報錯,但是redis server因為是作為緩存使用,不能夠隨隨便便的重啟,所以只能在客戶端想辦法,只能主動讓客戶端斷開連接。所以獲取得到6399端口的連接信息:

        netstat -tun | grep 6399 | awk '{print $5}' | awk -F':' '{print $1}' | sort | uniq -c

          8 10.143.106.95

          8 10.143.90.216

          5433 10.207.169.67

          4788 10.221.236.76

          1 10.221.244.39

          6 10.225.36.189

         在上面的命令可以很明顯的獲取得到那個IP地址連接redis服務(wù)的連接很多

        5.進入連接最多的服務(wù)器,獲得連接redis的客戶端信息

            netstat -tun | grep 6399 

            lsof -i:Port

            根據(jù)上面?zhèn)z個命令可以獲得客戶端的應(yīng)用服務(wù)信息

        6.獲取得到應(yīng)用服務(wù)信息之后,我們和開發(fā)商量之后,只能重啟才能讓客戶端主動斷開連接。所以直接重啟了應(yīng)用服務(wù)。

        7.更改redis配置信息。

            重啟客戶端之后,redis的connect也減少了一部分,這個時候可以連接上redis了。

            a)獲取redis的狀態(tài)信息 

            >127.0.0.1:6399>>info

            b)獲取redis本地配置文件信息,最大連接數(shù),timeout,tcp-keepalive

            >127.0.0.1:6399>> config *

            >127.0.0.1:6399>> config get maxclients

            "10000"

            >127.0.0.1:6399>> config get timeout

            0

            >127.0.0.1:6399>> config get tcp-keepalive

            0

            c)從上面命令可以看得出,最大連接數(shù)是10000,timeout和tcp-keepalive并沒有開啟,但是又不能重啟redis-server,所以只能在線修改配置信息。

            >127.0.0.1:6399>> config set maxclients=100000

            OK

            >127.0.0.1:6399>> config set timeout = 300

            OK

做完上面措施之后,客戶端連接數(shù)也已經(jīng)斷開。

問題產(chǎn)生的原因:

    1.zabbix監(jiān)控獲取得到的值為什么是0

        zabbix server上面執(zhí)行

            zabbix_get -s 0.0.0.0 -k 'redis[connect client,6399]'

            0

        原因是因為在agent段redis腳本抓取info信息的時候,對于不是數(shù)字類型的數(shù)據(jù)替換成0,所以導(dǎo)致zabbix 監(jiān)控獲取得到的數(shù)值是0

    2.為什么有這么多的連接

    線上的架構(gòu)是 

    client ->VIP->server  #VIP指的是負載均衡

    客戶端和服務(wù)的連接的中間是通過VIP進行轉(zhuǎn)發(fā)的,他們直接的通信是TCP/IP四層的通信,在VIP上面本身自己是有做timeout設(shè)置的,默認20min ,它會主動的斷開連接,但是卻沒有通知client和server端,導(dǎo)致client和server端并不清楚自己已經(jīng)斷開了連接。但是由于client的代碼并沒有設(shè)置主動斷開連接,所以client會認為自己是一直連接的狀態(tài),等到下一次它發(fā)起請求的時候,VIP會告訴client連接已經(jīng)斷開,client會重新在創(chuàng)建一個新的連接;對于server端來說即redis它本身也沒有開啟timeout和tcp-keepalive的,所以server端也不會主動的斷開連接,所以連接會越來越多,導(dǎo)致連接數(shù)完全被使用完。

            


分享文章:redis報錯“maxnumberofclientsreached"
URL網(wǎng)址:http://weahome.cn/article/jehcos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部