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

总结:

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

memcached超时异常

时间: 2024-10-13 01:04:59

memcached超时异常的相关文章

MongoDB 查询超时异常 SocketTimeoutException

在对超过百万条记录的集合进行聚合操作. DBObject match=(DBObject)JSON.parse("{$match:{logType:{'$in':[5,9]}}}"); DBObject group=(DBObject)JSON.parse("{$group:{'_id':'$domainUrl','count':{'$sum':1}}}"); AggregationOutput output = logCollection.aggregate(ma

ruby 中restclient怎么设定超时时间和捕获超时异常

先吐槽一下百度,就是个坑,翻遍了百度都没翻到答案,还好谷歌给力. 有两个方法,第一:绕过restclient直接使用原生方法: RestClient::Request.execute(:method => :post, :url => @url, :timeout => 90000000) 这样做的好处是不用重写restclient整个模块,可以直接使用,但我比较喜欢第二种方法,那就是重写restclient这个模块,代码如下: require 'net/http' require 'o

dubbo RPC超时异常小结

dubbo消费者调用服务超时的原因可能有很多,今天排查问题花了两个小时,也查了很多资料,好像每一篇资料都是提出一个问题,所以简单总结几点: 1. 配置才是重中之重,仔细检查服务提供方的dubbo service和消费者的dubbo reference.保证服务方暴露接口和ref对象正确,保证消费者引用接口正确. 2.保证服务接口没问题,并在dubbo admin查看好状态 3.保证传输的对象实现序列化接口. 4.确认消费者没有被禁用. 5.确认配置没问题后尝试调试服务方 保证超时时间设置合理,有

WebDriver连接超时异常

升级前:selenium2.42.2+ firefox 31 firefox提示升级成33之后,之前的代码都无法运行了,表现如下: org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output: profile\extensions\[email protected]","

大数据导致DataReader.Close超时的异常

公司一个数据抓取的程序,数据量极大,读取数据的用IDataReader的Read方法来进行数据处理,在测试的时候我想跑一部分数据后跳出循环,即break; 然后关闭datareader,但是在执行datareader.close()方法的时候出现了“超时异常”的错误, 查看了一下MSDN对Close方法的说明的备注 如下: 当使用 SqlDataReader 将关联的 SqlConnection 用于任何其他用途时,必须显式调用 Close 方法. Close 方法填写输出参数的值.返回值和 R

Memcached、Redis OR Tair

一.前言 非关系型数据库(NoSQL = Not Only SQL)的产品非常多,常见的有Memcached.Redis.MongoDB等优秀开源项目,相关概念和资料网上也非常丰富,不再重复描述,本文主要引入Memcached和Redis与淘宝开源Tair分布式存储进行对比测试,由于各自适用场景不同,且每个产品的可配置参数繁多,涉及缓存策略.分布算法.序列化方式.数据压缩技术.通信方式.并发.超时等诸多方面因素,都会对测试结果产生影响,单纯的性能对比存在非常多的局限性和不合理性,所以不能作为任何

缓存Memcached以及缓存策略

1.什么是memcached 缓存是一种常驻与内存的内存数据库,内存的读取速度远远快于程序在磁盘读取数据的速度.我们在设计程序的时候常常会考虑使用缓存,将经常访问的数据放到内存上面这样可以提高访问数据的速度,同时可以降低磁盘或数据库的压力. memcached就是一款可以方便实现缓存的工具软件,memcached的优势在于以下几点: 1.实现分布式缓存(支持热部署),通过hashcode根据缓存服务器ip智能分配将数据缓存到的服务器上. 2.实现最近最少访问的数据优先被移除缓存. 3.快速找到适

key/value存储系统-Memcached、Redis、Tair

每个产品的可配置参数繁多,涉及缓存策略.分布算法.序列化方式.数据压缩技术.通信方式.并发.超时等诸多方面因素,都会对测试结果产生影响,单纯的性能对比存在非常多的局限性和不合理性,所以不能作为任何评估依据,仅供参考. 1.尽管 Memcached 和 Redis 都标识为Distribute,但从Server端本身而言它们并不提供分布式的解决方案,需要Client端实现一定的分布算法将数据存储到各个节点,从而实现分布式存储,两者都提供了Replication功能(Master-Slave)保障可

Volley超时重试机制详解

Volley超时重试机制 基础用法 Volley为开发者提供了可配置的超时重试机制,我们在使用时只需要为我们的Request设置自定义的RetryPolicy即可. 参考设置代码如下: int DEFAULT_TIMEOUT_MS = 10000; int DEFAULT_MAX_RETRIES = 3; StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<S