首页 > 代码库 > memcached超时异常

memcached超时异常

问题:

最近测试服务器老是报memcached连接超时的错误:

Operation timed out. - failing node: /xx.xx.xx.xx:11211


检查网络,进程又都没问题。因为是三个tomcat共用一个memcached,于是想起是不是并发太大造成的等待超时。于是自己搭环境测试一下。

memcached官网下载:http://memcached.org/downloads

测试使用版本:memcached-1.4.20 + spymemcached-2.9.0 


采用并发线程进行测试:

2000个线程 × 每个线程10次操作(get/put),运行没问题,没有出异常。因为10次get/put操作是很快的,可能达不到并发的效果,于是改为:

2000个线程 × 每个线程100次操作(get/put),终于运行1-2秒没问题,后面开始狂报异常:

Exception in thread "Thread-1913" java.lang.RuntimeException: Exception waiting for value
    at net.spy.memcached.MemcachedClient.get(MemcachedClient.java:1130)
    at net.spy.memcached.MemcachedClient.get(MemcachedClient.java:1148)
    at memcached.MemcachedDao.get(MemcachedDao.java:38)
    at memcached.StressTest$Get.run(StressTest.java:68)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.util.concurrent.ExecutionException: net.spy.memcached.internal.CheckedOperationTimeoutException: Operation timed out. - failing node: /10.12.256.156:11211
    at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:173)
    at net.spy.memcached.internal.GetFuture.get(GetFuture.java:62)
    at net.spy.memcached.MemcachedClient.get(MemcachedClient.java:1123)
    ... 4 more
Caused by: net.spy.memcached.internal.CheckedOperationTimeoutException: Operation timed out. - failing node: /10.12.256.156:11211
    ... 7 more


memcached启动服务时,有个参数是表示“并发连接数”的,默认是 1024 ,于是改大这个参数重启服务:

#./memcached -d -u root -m 1024 -c 2048

再进行测试,发现没有报错了,于是重启memcached服务,改小并发连接数,再测试又开始报错了,呵呵,大概原因就是并发太大,等待超时了吧。


解决:

1、改动“并发连接数”参数,调到满足系统并发量。

2、memcached集群,集群的时候需要用到“一致性哈希算法”。


总结:

这个超时异常的原因之一是并发量太大造成的,遇到这个异常不妨往这个方面思考下。欢迎补充其他原因。



本文出自 “完美主义” 博客,请务必保留此出处http://liangxueming.blog.51cto.com/3911546/1539127