2016-11-23 64 views
1

升级到1.0.0土卫六之后,我开始看到负载下的下列情况除外,使用卡桑德拉(2.2.6)作为存储后端:com.thinkaurelius.titan.diskstorage.PermanentBackendException:意外中断

Caused by: java.lang.InterruptedException: sleep interrupted 
     at java.lang.Thread.sleep(Native Method)[:1.8.0_102] 
     at java.lang.Thread.sleep(Thread.java:340)[:1.8.0_102] 
     at 
java.util.concurrent.TimeUnit.sleep(TimeUnit.java:386)[:1.8.0_102] 
     at 
com.thinkaurelius.titan.diskstorage.util.time.TimestampProviders.sleepPast(TimestampProviders.java:138) 
     at 
com.thinkaurelius.titan.diskstorage.common.DistributedStoreManager.sleepAfterWrite(DistributedStoreManager.java:222) 
     ... 66 more 

可以通过配置修复吗? 尽管时间戳有几个可用配置项,但我没有发现任何与时间戳提供者本身相关的警告。

回答

2

你应该检查你的Cassandra日志。我发现当Cassandra启动它的compaction进程时,负载下的Titan开始抛出这些类型的错误以及超时错误。

使用dstat监视磁盘使用情况,在/var/log/cassandra/system.log中使用关键字“GC”的grep。如果你经常看到“GC”,那么你正在进行沉重的压实,这使泰坦陷入泥潭。

为了解决这个问题,您可以尝试优化将数据加载到泰坦的方式,从而不会经常导致压缩。

以下只是我们尝试过的工作对我们的情况下,事情:

  1. 避免删除。删除会触发导致压缩的墓碑。
  2. 增加JVM的大小。导致压缩运行的一个原因是当你开始用尽内存时,这使得它不太可能运行。
  3. 您可以尝试使用不同的compaction strategies。每一个都针对不同的用例进行了优化。
+0

压实是正常C *操作的一部分。每个节点最终都会执行压缩。如果泰坦不处理其持久性后端的正常运行状态,我会说这是一个错误? – Ralf

+0

可能,但我真的没有看太多。我认为这是一个疏忽。或者对失败的处理较差。我的怀疑是因为过时的Astyanax司机不能很好地处理好事情,因为这些事情禁止泰坦很好地处理它。但我不确定。 –