Renchunbing / xmemcached

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

反复出现重连session的情况 #276

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. xmemcached client用一致性hash连接6个memcached 
server,作为memcached server cluster的代理
2. 并发应该在每秒1k - 2k
3. 作为代理的xmemcached client会持续、不定时地删除一些session, 
然后很快加回来:

12/15 17:25 [Xmemcached-Reactor-10] AbstractController:365 - Remove a session: 
10.0.27.52:11211
12/15 17:25 [Xmemcached-Reactor-10] AbstractController:380 -
java.lang.RuntimeException:
        at net.rubyeye.xmemcached.impl.MemcachedConnector.removeMainSession(MemcachedConnector.java:378)
        at net.rubyeye.xmemcached.impl.MemcachedConnector.removeSession(MemcachedConnector.java:351)
        at net.rubyeye.xmemcached.impl.MemcachedHandler.onSessionClosed(MemcachedHandler.java:159)
        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.readFromBuffer(NioTCPSession.java:217)
        at com.google.code.yanf4j.nio.impl.AbstractNioSession.onRead(AbstractNioSession.java:196)
        at com.google.code.yanf4j.nio.impl.AbstractNioSession.onEvent(AbstractNioSession.java:341)
        at com.google.code.yanf4j.nio.impl.SocketChannelController.dispatchReadEvent(SocketChannelController.java:56)
        at com.google.code.yanf4j.nio.impl.NioController.onRead(NioController.java:157)
        at com.google.code.yanf4j.nio.impl.Reactor.dispatchEvent(Reactor.java:295)
        at com.google.code.yanf4j.nio.impl.Reactor.run(Reactor.java:142)

12/15 17:25 [Heal-Session-Thread] AbstractController:125 - Trying to connect to 
xx:11211 for 1 times
12/15 17:25 [Xmemcached-Reactor-0] AbstractController:251 - Add a session: 
10.0.27.52:11211

上面的异常是我自己在xmc中加代码打出来的,主要原因在这��
�:
com/google/code/yanf4j/nio/impl/NioTCPSession.java(readFromBuffer:216)
            if (n < 0) { // Connection closed
                this.close();
            } else {
                this.selectorManager.registerSession(this,
                        EventType.ENABLE_READ);
            }

What is the expected output? What do you see instead?

What version of the product are you using? On what operating system?

Please provide any additional information below.

Original issue reported on code.google.com by huge...@gmail.com on 15 Dec 2013 at 9:54

GoogleCodeExporter commented 9 years ago
n<0 表示连接被关闭

有没有heartbeat失败的日志?可能是心跳引起的。

Original comment by killme2...@gmail.com on 16 Dec 2013 at 2:39

GoogleCodeExporter commented 9 years ago
没有heartbeat日志,并且曾经关闭过心跳,仍然有这个现象。

现在正在尝试加上tcp 
keepalive,除此之外还有什么其它建议么?

Original comment by huge...@gmail.com on 19 Dec 2013 at 3:52