redis/twemproxy 客户端连接异常

对于一个DBA,客户端连接异常问题可以说是家常便饭的事情,处理多了都想吐。

root cause无疑发生在三个地方,先找自身的原因,依次排查下去:

1)服务器端db的负载,如果负载太高,创建socket太慢引起超时。另外服务器端socket的个数太多,也可以导致创建连接需要很长的时间或者创建连接不成功。

2)网络是够有抖动,包括lvs/twemproxy重启操作。

3)客户端的连接配置参数是否合理,连接池的大小,超时参数大小。还有客户端服务器的状态,负载和tcp连接状况。

下面是近三个工作日碰到的redis/twemproxy连接问题。

1、不合理的jedispool配置,连接池设置的太小
错误信息:

daemon prio=10 tid=0x00002ab367888000 nid=0x1881 in Object.wait() 
[0x00002ab3e5754000] java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1315)
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
...

监控的连接数显示:redis的连接数每秒维持在200+个, 比较正常。

jedispool配置:最大允许创建的连接个数为50个,相比连接数,这个值偏小。

解决方法:
1)增大连接池的大小,但是不要太大,避免客户端和服务器端维持大量的空闲了连接。
2)可以设置minIdle和EvictIdle的时间,加快获取连接对象和释放空闲的连接。
3)设置testOnBorrow=True参数,每次get连接时候进行连接有效性检测。

ps:jedis/jedispool的很多默认参数配置并不适合用,需要按照应用需求何求调整。

2、没有返回连接对象
错误信息:
an error occurred when executing function getJedis(): Could not get a resource from the pool

jedispool连接池的使用方式:

Jedis jedis = JedisFactory.jedisPool.getResource(); try{ 
    jedis.set("key","val");}finally { 
    JedisFactory.jedisPool.returnResource(jedis); }

连接使用完之后,需要归还到连接池中。

After each Jedis method call, return the resource pool. Your app has probably used all the threads and waits for some to be 
dropped.This may cause behavior you're explaining and the app is probably blocked.

3、容错处理

网络链路并不能保证绝对的稳定,db服务也不能提供99.999%的可靠服务。代码需要能够捕获异常和异常处理,而不是应用程序报错。

转自:http://mdba.cn/?p=846

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/2488

(0)
s19930811s19930811
上一篇 2015-04-03
下一篇 2015-04-04

相关推荐

  • Sed文本文件工具的使用详解

    Sed文本文件工具的使用详解 一、概述 sed 工具实际上就是一个非交互式的编辑器,主要是为了处理文本而生的,我们知道处理文本的三剑客是 grep sed awk 我们之前学习过 grep 文本过滤工具,它的主要作用是为了过滤文本,而sed 工具也是过滤文本,只不过sed工具针对的是文件中的每一行,而且sed工具更加强大,下面还具体说明一下sed 工具的原理…

    Linux干货 2016-10-09
  • N26-第一周作业

    1、计算机主要由硬件部分和软件部分组成。     硬件部分:         (1)、CPU:包括运算器、控制器、寄存器、缓存。CPU的核心部件是运算器和控制器,它的功能主要是解释计算机指令以及处理计算机软件中的数据。         (2…

    Linux干货 2016-12-27
  • 马哥教育网络班22期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; fdisk /dev/sdd n p 1 2048 +10G w (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; mke2fs -t ext4 -b 2048 -m 2&nb…

    Linux干货 2016-09-26
  • N26-第二周

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。(盗图了,哈哈哈) 文件查看类命令:cat, tac, head, tail, more, less,touch    cat 查看文件内容   tac命令   反向查看文件内容  注:可对照上图 分屏查看命令:more  …

    Linux干货 2017-01-07
  • GIAC 2017全球互联网架构大会12月22日即将登陆上海!

    12月22~23日,高可用架构和msup联合主办的GIAC 全球互联网架构大会将于上海举行。GIAC 2017全球互联网架构大会优惠报名平台活动家

    2017-12-04
  • 进程理论和相关工具的使用

    内核的功用 进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等     Process: 运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(Process ID,PID)号码被用来标记各个进程     UID、GID、和SELinux语境决定对文件…

    Linux干货 2017-08-28