解決Redis 延遲故障

前一段時間redis客戶端在使用php connect 連接redis 的經常報一個redis server went away 等信息。

首先想到的想到的是reids超時設置的問題,timeout、tcp-keepalive、以及php的default_socket_timeout時間

 127.0.0.1:6381> CONFIG GET *
  17) "timeout"
  18) "0"
  19) "tcp-keepalive"
  20) "0"

 vim  xxx/php_path/php.ini
 default_socket_timeout = 300

注意這個socket時間不能改成0 要是0的話你會悲劇的。

測試 不解決還是ent away

php改 pconnect不解決。好吧,這個詭異的問題已經越來越嚴重了。

 # vmstat  1 3
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  0  0      0 6022256 383340 10371320    0    0     0    25    0    0  0  0 100  0  0
  0  0      0 6022380 383340 10371368    0    0     0   116 6401 3463  0  0 100  0  0
  0  0      0 6022380 383340 10371368    0    0     0    16 5880 3022  0  0 100  0  0

 # iostat -x -k 1                    
 Linux 2.6.18-308.el5 (yq-bbsrqueue1)    12/24/2015

 avg-cpu:  %user   %nice %system %iowait  %steal   %idle
            0.07    0.00    0.05    0.00    0.00   99.87

 Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
 cciss/c0d0        0.00     2.52  0.00  0.51     0.20    12.12    48.39     0.00    0.47   0.25   0.01
 cciss/c0d0p1      0.00     2.52  0.00  0.51     0.20    12.12    48.39     0.00    0.47   0.25   0.01
 cciss/c0d1        0.00    91.90  0.00  3.32     0.44   380.88   229.15     0.03    9.40   0.19   0.06
 cciss/c0d1p1      0.00    91.90  0.00  3.32     0.44   380.88   229.15     0.03    9.40   0.19   0.06

好吧檢查網絡
沒問題…

哪還有什么能造成延遲呢?
AOF 和硬盤I/O操作延遲、數據過期造成的延遲、redis看門狗的延遲

從iostat上來看aof基本不會造成這方面的延遲可以排除掉

key過期:
好吧我們看看文檔

  Latency generated by expires
 Redis evict expired keys in two ways:
 One lazy way expires a key when it is requested by a command, but it is found to be already expired.
 One active way expires a few keys every 100 milliseconds.

就是說有兩種方式:
lazy 在key被請求的時候才檢查是否過期
active 每0.1秒進行一次過期檢查
好吧問問拍黃片的哥哥是否有大面積過期的key。咨詢木有。

那找找看門狗吧

 127.0.0.1:6381> config get watchdog
 (empty list or set)

木有….

難道就真的沒有辦法了嘛
(當時沒有抓包)苦惱的只能看配置 看日志找問題了

那就在重新瀏覽配置吧

能出問題的配置項只有:
timeout
tcp-keepalive
tcp-backlog
maxclients

查看一下當前的連接數 :

 # redis-stat host 10.xx.xxx.xxx port 6381                        
 ------- data ------ --------------------- load -------------------- - child -
 keys       mem      clients blocked requests            connections          
 4325509    2.00G    25      0       526898898 (+526898898) 100841471   
 4325510    2.00G    14      0       526899989 (+1091)   100841670   
 4325511    2.00G    20      0       526901583 (+1594)   100841933   
 4325509    2.00G    16      0       526903336 (+1753)   100842128   
 4325511    2.00G    9       0       526904748 (+1412)   100842328

出問題的timeout tcp-keepalive 。
哪還有什么地址配置的呢?
sysctl
那查看一下 tcp方面的配置 主要是時間和隊列長度的
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 150
net.ipv4.tcp_max_tw_buckets = 20000

那只能改一下這倆個試試了

測試解決

最后改成
net.ipv4.tcp_fin_timeout = 60
最后這個問題應該是應用層和內核層 連接時間不匹配導致的。
內核層超時斷開了,應用層以為還能用,請求就過不去,只能再重新走一遍,就會間接性延遲。

可惜當時沒有抓包。

http://www.redis.io/topics/latency
官方文檔

原創文章,作者:可樂,如若轉載,請注明出處:http://www.www58058.com/10503

(0)
可樂可樂
上一篇 2016-02-14 10:19
下一篇 2016-02-14 10:23

相關推薦

  • Linux程序包管理(二)YUM使用

    YUM Linux程序包管理(二) 說完了程序包管理以及rpm的相關使用,接下來說說rpm的前端管理工具 YUM YUM是什么?    前面提到,yum是rpm程序包管理器的前端管理工具,那么yum到底是什么?又能做什么呢? YUM:yellow dog,Yellowdog Update Mod…

    Linux干貨 2016-06-01
  • 簡明 Vim 練級攻略

    vim的學習曲線相當的大(參看各種文本編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級教程了,沒有列舉所有的命令,只是列舉了那些最有用的命令。非常不錯。 ——————————正文開始—————————— …

    Linux干貨 2015-04-04
  • N26-第五周博客

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@localhost ~]# grep "^[[:space:]].*$" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; [root…

    系統運維 2017-02-10
  • N25_第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; 2、寫一個腳本     (1) 獲取當前主機的主機名,保存于hostname變量中;     (2) 判斷此變量的值是否為localhost,如果是…

    Linux干貨 2017-02-02
  • Linux程序包管理rpm、yum、源碼編譯

    概述:     眾所周知,Linux操作系統本身,必須要借助額外的一些軟件,才能完成某些應用的,操作系統如果沒有應用程序的填充,就無法創造出生產力,這樣即使再完美的操作系統,也毫無用處。那么本章就簡要介紹一下Linux系統上對程序包的管理,分為以下三個部分:     1、程序包的…

    Linux干貨 2016-08-24
  • linux的tty

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/140012 最近做了一個小測試,得到了以下結論 測試linux發行版本:rhel AS4.0 環境:VMware 5.0 目的:修改 vi /etc/initt…

    Linux干貨 2015-03-26

評論列表(1條)

  • stanley
    stanley 2016-02-14 10:22

    寶貴的排查思路,文章如果精心打造可以推公眾號了~

欧美性久久久久