我之前在使用Cassandra的Titan 1.0上看到了这些问题。要检查两件事:
的 打开和关闭图表 强>
您是按每个用户的图表或每个用户的不同图表打开不同的交易吗?你在做什么
(1)
//User 1 Logs in graph = TitanFactory.open(config); soStuffWithGraph(graph); //User 2 Logs in graph = TitanFactory.open(config); soStuffWithGraph(graph);
要么
(2)
graph = TitanFactory.open(config); //User 1 Logs in soStuffWithGraph(graph); //User 2 Logs in soStuffWithGraph(graph);
方法(1)意味着每个用户使用他们自己的图形对象获得他们自己与图形的连接。这非常重,导致更多的内存使用。
方法(2)意味着每个用户使用相同的连接但不同的交易。在我看来这是优选的。 的 注意:这是假设用户在不同的线程上。 强>
的 长期交易 强>
这就是我遇到的问题,导致了类似的GC问题。我只是让交易存活了太久。为了加速查询Titan缓存,我不认为它会清除缓存,除非交易被关闭。所以理想情况下你应该有这样的东西:
graph = TitanFactory.open(config); //User 1 Logs in soStuffWithGraph(graph); graph.tx().close(); //User 2 Logs in soStuffWithGraph(graph); graph.tx().close();
用户完成后,每个事务都关闭的位置。