在放置操作SSM Xmemcached期间出现InterruptedException

时间:2016-10-27 06:47:03

标签: java spring memcached simple-spring-memcached xmemcached

我们有一个专用服务器作为memcached。它具有以下配置:

STAT curr_connections 242
STAT total_connections 684
STAT chunk_size 48
STAT num_threads 64
STAT num_threads_per_udp 64

但是我们在对象设置期间看到了高速缓存的InterruptedException异常。以下是日志

WARN  [com.google.code.ssm.spring.SSMCache] (hystrix-ABCGROUP-45)  An error has ocurred for cache APP_CACHE_1 and key 51BREAnullUFLDE384nullHOnull: com.google.code.ssm.providers.CacheException: java.lang.InterruptedException
        at com.google.code.ssm.providers.xmemcached.MemcacheClientWrapper.set(MemcacheClientWrapper.java:240)
        at com.google.code.ssm.CacheImpl.set(CacheImpl.java:290)
        at com.google.code.ssm.CacheImpl.set(CacheImpl.java:128)
        at com.google.code.ssm.spring.SSMCache.put(SSMCache.java:109)
        at org.springframework.cache.interceptor.AbstractCacheInvoker.doPut(AbstractCacheInvoker.java:82)
        at org.springframework.cache.interceptor.CacheAspectSupport$CachePutRequest.apply(CacheAspectSupport.java:651)
        at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:358)
        at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:299)
        at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:61)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
        at com.sun.proxy.$Proxy140.cleanseAddress(Unknown Source)
        at org.hystrix.command.ABCommand.runTask(ABCommand.java:33)
        at org.hystrix.command.ABCommand.runTask(ABCommand.java:13)
        at org.hystrix.BaseHystrixCommand.run(BaseHystrixCommand.java:75)
        at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:293)
        at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:288)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
        at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
        at rx.Observable.unsafeSubscribe(Observable.java:8460)
        at com.netflix.hystrix.AbstractCommand$5.call(AbstractCommand.java:521)
        at com.netflix.hystrix.AbstractCommand$5.call(AbstractCommand.java:497)
        at rx.Observable.unsafeSubscribe(Observable.java:8460)
        at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
        at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56)
        at org.util.ContextCallable.call(ContextCallable.java:51)
        at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69)
        at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [rt.jar:1.8.0_92]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [rt.jar:1.8.0_92]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_92]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_92]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_92]
Caused by: java.lang.InterruptedException
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326) [rt.jar:1.8.0_92]
        at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:277) [rt.jar:1.8.0_92]
        at net.rubyeye.xmemcached.XMemcachedClient.latchWait(XMemcachedClient.java:2516)
        at net.rubyeye.xmemcached.XMemcachedClient.sendStoreCommand(XMemcachedClient.java:2498)
        at net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1338)
        at net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1396)
        at net.rubyeye.xmemcached.XMemcachedClient.set(XMemcachedClient.java:1383)
        at com.google.code.ssm.providers.xmemcached.MemcacheClientWrapper.set(MemcacheClientWrapper.java:238)
        ... 39 more

以下是memcached版本

<dependency>
     <groupId>com.googlecode.xmemcached</groupId>
    <artifactId>xmemcached</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.google.code.simple-spring-memcached</groupId>
    <artifactId>xmemcached-provider</artifactId>
    <version>3.6.0</version>
</dependency>
<dependency>
 <groupId>com.google.code.simple-spring-memcached</groupId> 
 <artifactId>spring-cache</artifactId>
  <version>3.1.0</version> 
</dependency>

我不确定这个例外的原因是什么。我们配置了多个缓存,但仅在APP_CACHE_1中遇到此异常。 APP_CACHE_1的到期时间是7200。

1 个答案:

答案 0 :(得分:0)

尝试更新版本的xmemcached:2.2.0,旧版本中存在类似的错误:https://github.com/killme2008/xmemcached/issues/30

我没有测试它是否与SSM 3.6.0兼容,但值得尝试。

使用最新版本的xmemcached-provider和spring-cache:3.6.1

相关问题