ZoroXing / xmemcached

Automatically exported from code.google.com/p/xmemcached
Apache License 2.0
0 stars 0 forks source link

反复出现重连session #196

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
我使用的是 Xmemcached 1.3.6
配置
cache.memcacheConnectionPoolSize=1
cache.memcacheHost=10.142.4.43:9168 10.142.4.44:9168
cache.memcacheHostWeights1=1
cache.memcacheHostWeights2=1
cache.opTimeout=4500

1.启动后反复出现重连session
[ WARN][06-03 
15:23:55.514][pool-8-thread-1][net.rubyeye.xmemcached.impl.MemcachedHandler:359]
->>>Session(10.142.4.43:9168) heartbeat fail 10 times,close session and try to 
heal it
[ WARN][06-03 
15:23:55.514][pool-8-thread-1][com.google.code.yanf4j.core.impl.AbstractControll
er:359]->>>Remove a session: 10.142.4.43:9168
[ WARN][06-03 
15:23:57.516][Heal-Session-Thread][com.google.code.yanf4j.core.impl.AbstractCont
roller:359]->>>Trying to connect to 10.142.4.43:9168 for 1 times
[ WARN][06-03 
15:23:57.518][Xmemcached-Reactor-0][com.google.code.yanf4j.core.impl.AbstractCon
troller:359]->>>Add a session: 10.142.4.43:9168
[ WARN][06-03 
15:23:59.550][pool-8-thread-3][net.rubyeye.xmemcached.impl.MemcachedHandler:359]
->>>Session(10.142.4.44:9168) heartbeat fail 10 times,close session and try to 
heal it
[ WARN][06-03 
15:23:59.550][pool-8-thread-3][com.google.code.yanf4j.core.impl.AbstractControll
er:359]->>>Remove a session: 10.142.4.44:9168
[ WARN][06-03 
15:24:01.552][Heal-Session-Thread][com.google.code.yanf4j.core.impl.AbstractCont
roller:359]->>>Trying to connect to 10.142.4.44:9168 for 1 times
[ WARN][06-03 
15:24:01.554][Xmemcached-Reactor-0][com.google.code.yanf4j.core.impl.AbstractCon
troller:359]->>>Add a session: 10.142.4.44:9168

2.操作时不时会报Session has been closed异常
Caused by: net.rubyeye.xmemcached.exception.MemcachedException: Session has 
been closed
        at net.rubyeye.xmemcached.impl.MemcachedTCPSession.destroy(MemcachedTCPSession.java:110)
        at net.rubyeye.xmemcached.impl.MemcachedHandler.onSessionClosed(MemcachedHandler.java:138)
        at com.google.code.yanf4j.core.impl.AbstractSession.onClosed(AbstractSession.java:305)
        at com.google.code.yanf4j.core.impl.AbstractSession.close(AbstractSession.java:293)
        at com.google.code.yanf4j.nio.impl.NioTCPSession.decode(NioTCPSession.java:302)
        at com.google.code.yanf4j.nio.impl.NioTCPSession.readFromBuffer(NioTCPSession.java:205)
        at com.google.code.yanf4j.nio.impl.AbstractNioSession.onRead(AbstractNioSession.java:198)
        at com.google.code.yanf4j.nio.impl.AbstractNioSession.onEvent(AbstractNioSession.java:343)
        at com.google.code.yanf4j.nio.impl.SocketChannelController.dispatchReadEvent(SocketChannelController.java:56)
        at com.google.code.yanf4j.nio.impl.NioController$ReadTask.run(NioController.java:110)
        ... 3 more

3.时不时会报此异常 但代码直接是memcachedClient.get(cacheKey); 
注:此Memcached服务端是某厂商的云平台
Caused by: net.rubyeye.xmemcached.exception.MemcachedException: 
net.rubyeye.xmemcached.exception.UnknownCommandException: Response error,error 
message:Unknow command GET_ONE,key=uservalue:4
        at net.rubyeye.xmemcached.XMemcachedClient.checkException(XMemcachedClient.java:1829)
        at net.rubyeye.xmemcached.XMemcachedClient.fetch0(XMemcachedClient.java:578)
        at net.rubyeye.xmemcached.XMemcachedClient.get0(XMemcachedClient.java:957)
        at net.rubyeye.xmemcached.XMemcachedClient.get(XMemcachedClient.java:913)
        at net.rubyeye.xmemcached.XMemcachedClient.get(XMemcachedClient.java:925)
        at net.rubyeye.xmemcached.XMemcachedClient.get(XMemcachedClient.java:948)
        at com.wee9.util.aspect.cache.CHashingCacheGetAspectJ.methodCacheHold(CHashingCacheGetAspectJ.java:152)
        at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
        at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
        at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:64)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
        at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
        ... 50 more
Caused by: net.rubyeye.xmemcached.exception.UnknownCommandException: Response 
error,error message:Unknow command GET_ONE,key=uservalue:4
        at net.rubyeye.xmemcached.command.Command.decodeError(Command.java:244)
        at net.rubyeye.xmemcached.command.Command.decodeError(Command.java:270)
        at net.rubyeye.xmemcached.command.text.TextGetCommand.decode(TextGetCommand.java:126)
        at net.rubyeye.xmemcached.codec.MemcachedDecoder.decode0(MemcachedDecoder.java:61)
        at net.rubyeye.xmemcached.codec.MemcachedDecoder.decode(MemcachedDecoder.java:56)
        at com.google.code.yanf4j.nio.impl.NioTCPSession.decode(NioTCPSession.java:288)
        at com.google.code.yanf4j.nio.impl.NioTCPSession.readFromBuffer(NioTCPSession.java:205)
        at com.google.code.yanf4j.nio.impl.AbstractNioSession.onRead(AbstractNioSession.java:198)
        at com.google.code.yanf4j.nio.impl.AbstractNioSession.onEvent(AbstractNioSession.java:343)
        at com.google.code.yanf4j.nio.impl.SocketChannelController.dispatchReadEvent(SocketChannelController.java:56)
        at com.google.code.yanf4j.nio.impl.NioController$ReadTask.run(NioController.java:110)
        ... 3 more
不知是何原因?

Original issue reported on code.google.com by akimotos...@gmail.com on 3 Jun 2012 at 7:32

GoogleCodeExporter commented 8 years ago
你的日志不是说了么,服务端不支持GET_ONE命令吧,跟你们云�
��台提供商确认下指令的支持情况呀(服务端遇到不支持的指
令,一般的做法是断开连接)。

此Memcached服务端是某厂商的云平台
Caused by: net.rubyeye.xmemcached.exception.MemcachedException: 
net.rubyeye.xmemcached.exception.UnknownCommandException: Response error,error 
message:Unknow command GET_ONE,key=uservalue:4

Original comment by teneb...@gmail.com on 3 Jun 2012 at 8:26

GoogleCodeExporter commented 8 years ago
不支持multi 
get?确认下这个产品支持和不支持哪些memcached协议。

Original comment by killme2...@gmail.com on 3 Jun 2012 at 8:45

GoogleCodeExporter commented 8 years ago
常规的set add replace get gets cas bget delete Incr Decr append 
prepend都支持

Original comment by akimotos...@gmail.com on 4 Jun 2012 at 1:58

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
原因可能是他不支持version,stats协议 
而xmemcache的心跳是访问version导致的?那能否在配置中关闭心�
��线程?或者更改心跳命令?

Original comment by akimotos...@gmail.com on 4 Jun 2012 at 6:16

GoogleCodeExporter commented 8 years ago
可以禁止心跳检测,通过:

memcachedClient.setEnableHeartBeat(false);

也请确认它支持批量get协议,也就是可以一次get多个key。

Original comment by killme2...@gmail.com on 4 Jun 2012 at 7:37

GoogleCodeExporter commented 8 years ago
确认他们支持的协议比较少 我们改用了memcache-client-forjava 
感谢killme大侠的support 后续我们再会用xmemcache做测试 
争取找到根本原因

Original comment by akimotos...@gmail.com on 7 Jun 2012 at 3:09

GoogleCodeExporter commented 8 years ago
关闭心跳也没有解决?

Original comment by killme2...@gmail.com on 7 Jun 2012 at 1:24

GoogleCodeExporter commented 8 years ago
2012-09-07 10:37:21  [net.rubyeye.xmemcached.impl.MemcachedHandler]-[WARN] 
Session(192.168.8.86:11211) heartbeat fail 4 times,close session and try to 
heal it
2012-09-07 10:37:21  [net.rubyeye.xmemcached.impl.MemcachedHandler]-[ERROR] 
XMemcached network layout exception
java.nio.channels.ClosedChannelException
    at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:135)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:326)
    at com.google.code.yanf4j.nio.impl.AbstractNioSession.doRealWrite(AbstractNioSession.java:321)
    at com.google.code.yanf4j.nio.impl.AbstractNioSession.onEvent(AbstractNioSession.java:338)
    at com.google.code.yanf4j.nio.impl.Reactor.dispatchEvent(Reactor.java:283)
    at com.google.code.yanf4j.nio.impl.Reactor.run(Reactor.java:141)

Killme大侠,生产环境一出现这个日志,所以我在本地进行了��
�下压力测试,发现如果我100个线程请求memcached,不会报如何�
��常日志,但是如果线程数放大到200左右,就会出现以上异常
,和生产环境的日志一样,所以我怀疑是并发的问题,希望��
�能回答,谢谢!

Original comment by xieyoupi...@126.com on 7 Sep 2012 at 2:46

GoogleCodeExporter commented 8 years ago
@xieyouping2006@126.com,

你们有使用noreply操作?使用的xmemcached版本是多少。

Original comment by killme2...@gmail.com on 7 Sep 2012 at 5:16