Closed NorthWindTR closed 7 years ago
xmemcached 是线程安全的。
2.我感觉非常奇怪,之前我用你的sdk做数据迁移是很稳定的,qps也到了每秒三四百,没有出现任何异常,不过是单纯的写;现在我把相同代码提到jstorm上来使用(一个分布式计算平台),流量其实反而是更低的,反而各种抛异常; 我确认一下,我看你的代码,链接断开是会重连的是吧? 还有就是这种链接断开会是什么问题,是我使用不当的问题么,请问可以怎么追溯?
你连的是 memcached 吗?版本多少,用的什么协议
我连的是我们这边一个兼容memcached协议的其他kv存储,用的是memcached的文本协议,应该是sdk的默认协议
xmemcached 会使用 version 协议做心跳的,要确认是否支持,如果不支持,可以禁用掉 setEnableHeartBeat(false)
刚试了一下,问题解决了,没再狂抛异常了,非常感谢
net.rubyeye.xmemcached.impl.MemcachedConnector.send(MemcachedConnector.java:501), net.rubyeye.xmemcached.XMemcachedClient.sendCommand(XMemcachedClient.java:327), net.rubyeye.xmemcached.XMemcachedClient.sendStoreCommand(XMemcachedClient.java:2534), net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1374), net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1432), net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1419), com.tencent.mta.statistics.common.service.MemcachedCommand.invoke(MemcachedCommand.java:36), com.tencent.mta.statistics.common.service.MemcachedService.invoke(MemcachedService.java:58), com.tencent.mta.statistics.common.service.MemcachedService.set(MemcachedService.java:81), com.tencent.mta.statistics.guid.GuidBolt.execute(GuidBolt.java:137), backtype.storm.topology.BasicBoltExecutor.execute(BasicBoltExecutor.java:52), com.tencent.jstorm.daemon.executor.bolt.BoltExecutor.tupleActionFn(BoltExecutor.java:190), com.tencent.jstorm.daemon.executor.bolt.BoltExecutor.onEvent(BoltExecutor.java:156), backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:143), backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:114), com.tencent.jstorm.daemon.executor.bolt.BoltExecutor.run(BoltExecutor.java:128), com.tencent.jstorm.utils.thread.AsyncLoopRunnable.run(AsyncLoopRunnable.java:51), java.lang.Thread.run(Thread.java:745)
某一个线程栈如上;
我们会在一个进程进程下边的多个互不相干的线程里起多个memcached client,在这个线程里串行的使用memcached client,中间是不shutdown的;我们的key和value都只有几十字节,不过可能会有些key是多次重复的;
使用的是完全默认的参数配置,请教一下,可能是什么问题?