xmemcached在Tomcat下启动后,再reload的时候总抛出空指针

donaldtrump 2010-06-24
[quote="dennis_zane]
你将你的配置贴出来看下吧,xmc这块。

配置跟手册上一模一样,我把server's weights去掉,memcached装在本地,也按照dengjie200说的使用文本协议,上面的错误堆栈在修改代码重新发布后会一直不停的出现,另外谢谢dennis_zane的耐心

<bean name="memcachedClient"
class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean"
destroy-method="shutdown">
<property name="servers">
<value>127.0.0.1:11211</value>
</property>
<!-- nio connection pool size -->
<property name="connectionPoolSize" value="2"></property>
<!-- Use binary protocol,default is TextCommandFactory -->
<property name="commandFactory">
<bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean>
</property>
<!-- Distributed strategy -->
<property name="sessionLocator">
<bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
</property>
<!-- Serializing transcoder -->
<property name="transcoder">
<bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
</property>
<!-- ByteBuffer allocator -->
<property name="bufferAllocator">
<bean class="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"></bean>
</property>
</bean>
dennis_zane 2010-06-24
你换成了文本协议,现在堆栈应该跟以前不一样吧,你最好将完整的堆栈发出来,并且说下你的xmemcached和memcached的版本,我好测试,看看能不能重现。
donaldtrump 2010-06-24
换成文本协议之后还是一样的错误堆栈,xmemcached用的是xmemcached-1.2.4-bugfix.jar 下载链接是:http://code.google.com/p/xmemcached/downloads/list,memcached是windows1.4.4版,下载链接是:http://labs.northscale.com/memcached-packages/  Windows, (32-bit) zip file版
dennis_zane 2010-06-24
堆栈不可能是一样的,文本协议的心跳检测命令跟二进制协议的心跳检测命令完全不同,你确认下吧。
dennis_zane 2010-06-24
你可以暂时关闭心跳检测看看效果

memcachedClient.setEnableHeartBeat(false);
dennis_zane 2010-06-24
这个问题我估计是由于ClassLoader的类加载引起的,tomcat做类的热部署,要先卸载类,那么IoBuffer被卸载之后,静态变量BufferAllocator找不到,因此报个NPE的异常。
donaldtrump 2010-06-25
dennis_zane 写道
你可以暂时关闭心跳检测看看效果

memcachedClient.setEnableHeartBeat(false);

bingo,加了这句之后就没有出现了
donaldtrump 2010-06-25
我关闭心跳检测后会影响memcached的效率吗?
还是开发的时候关掉,部署到服务器的时候打开?

问题总算找到了,谢谢dennis_zane 百忙之中热心解答
dennis_zane 2010-06-28
donaldtrump 写道
我关闭心跳检测后会影响memcached的效率吗?
还是开发的时候关掉,部署到服务器的时候打开?

问题总算找到了,谢谢dennis_zane 百忙之中热心解答


我是建议测试的memcached也是linux版本,官方也只提供*nix版本,线上同样建议开启心跳检测,为了及时发现连接异常。
Global site tag (gtag.js) - Google Analytics