首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j:死锁内存泄漏

Neo4j:死锁内存泄漏
EN

Stack Overflow用户
提问于 2013-06-13 17:45:32
回答 2查看 825关注 0票数 2

我有大量的联系人和关系,我正在尝试插入(数百万)。为了加快速度,我想我可以批处理它们,然后让多个线程并发地插入它们。这会导致一些死锁,但因为我可以重试它们,所以我对此没有问题。

代码语言:javascript
复制
   public void doBatch(final Collection<Object> rows) throws Exception {
    int retryCount = 3;
    while(!(retryCount<3)) {
        Transaction tx = graphdb.beginTx();
        try {
            for (Object row : rows) {
                String[] fields = ((String) row).split(DELIMITER, -1);
                if (fields.length < 4) {
                    log.error("Not enough fields to process row:" + row);
                } else {
                    addLineToGraph(fields[0], fields[1], fields[2], fields[3]);
                }
            }
            tx.success();
            retryCount = 0;
        } catch (DeadlockDetectedException dead) {
            tx.failure();
            retryCount--;
            log.warn("Retry deadlock");
        } catch (Exception e) {
            tx.failure();
            throw e;
        } finally {
            tx.finish();
        }
    }
}

不幸的是,经过几个小时的运行和大量死锁,我耗尽了内存(超过了GC开销限制),即使在尝试10G堆之后也是如此。在分析了堆栈转储之后,我注意到了大量的Lock:

代码语言:javascript
复制
One instance of "org.neo4j.kernel.impl.transaction.RWLock" loaded by "sun.misc.Launcher$AppClassLoader @ 0xc0271350" occupies 672.139.928 (84,78%) bytes.
The memory is accumulated in one instance of "java.util.HashMap$Entry[]" loaded by "<system class loader>".

我的印象是,这是由于失败的事务没有释放锁造成的,所以我将我的代码限制在一个线程中,这将确保不会发生更多的死锁。这样做之后,我可以看到由垃圾收集引起的正常锯齿图,并且不会再出现内存不足错误。根据我的理解,tx.finish();应该清理一切吗?还是我错过了什么?

我在嵌入式模式下使用neo4j 2.0.0-M03。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 21:35:13

我升级到了2.0.0-M05,现在我得到了不同的行为。我在PersistenceWindowPool类上得到一个空指针。至少在目前,这个类不是完全线程安全的。他们告诉我这个问题将在2.0中解决,但在此之前,我使用的是我自己的同步版本的这个类。

https://github.com/bennies/neo4j/commit/d8a0f4732f347f2038ebace83c14d37d4b1f8691

感谢所有替代解决方案的想法:)

票数 0
EN

Stack Overflow用户

发布于 2013-09-10 15:34:00

如果在更新关系节点的任何属性时使用锁,然后释放锁,该怎么办?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17083971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档