haishi 发表于 2018-12-24 11:04:31

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集群,集群的时候需要用到“一致性哈希算法”。
  

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

  

  




页: [1]
查看完整版本: memcached超时异常