2014-11-17 81 views
0

我們有一箇中等大小的圖形,其中包含6330318個節點和6779549個關係。導入數據後,我無法啓動neo4j服務器或neo4j外殼。他們都失敗了GC overhead limit exceeded錯誤。我爲JVM提供了12 GB的最大堆空間大小。服務器有15GB RAM。 neo4j.properies具有內存映射IO的以下配置。無法查詢內存不足錯誤的Neo4J數據庫

neostore.nodestore.db.mapped_memory=400M 
neostore.relationshipstore.db.mapped_memory=520M 
neostore.propertystore.db.mapped_memory=100M 
neostore.propertystore.db.strings.mapped_memory=10M 
neostore.propertystore.db.arrays.mapped_memory=10M 

我們在圖中沒有任何屬性,因此屬性庫相關設置的值較低。

我也編寫了一個小型web應用程序來查詢部署在Tomcat上的圖。這也失敗,出現以下錯誤

java.lang.OutOfMemoryError: Java heap space 
    java.util.Arrays.copyOf(Arrays.java:2245) 
    java.util.Arrays.copyOf(Arrays.java:2219) 
    java.util.ArrayList.grow(ArrayList.java:242) 
    java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216) 
    java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208) 
    java.util.ArrayList.add(ArrayList.java:440) 
    org.apache.lucene.index.FieldInfos.addInternal(FieldInfos.java:216) 
    org.apache.lucene.index.FieldInfos.read(FieldInfos.java:361) 
    org.apache.lucene.index.FieldInfos.<init>(FieldInfos.java:74) 
    org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:80) 
    org.apache.lucene.index.SegmentReader.get(SegmentReader.java:116) 
    org.apache.lucene.index.SegmentReader.get(SegmentReader.java:94) 
    org.apache.lucene.index.DirectoryReader.<init>(DirectoryReader.java:105) 
    org.apache.lucene.index.ReadOnlyDirectoryReader.<init>(ReadOnlyDirectoryReader.java:27) 
    org.apache.lucene.index.DirectoryReader$1.doBody(DirectoryReader.java:78) 
    org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:709) 
    org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:72) 
    org.apache.lucene.index.IndexReader.open(IndexReader.java:256) 
    org.neo4j.kernel.api.impl.index.LuceneLabelScanStore.init(LuceneLabelScanStore.java:249) 
    org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.init(LifeSupport.java:483) 
    org.neo4j.kernel.lifecycle.LifeSupport.init(LifeSupport.java:72) 
    org.neo4j.kernel.impl.nioneo.xa.NeoStoreXaDataSource.start(NeoStoreXaDataSource.java:423) 
    org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:507) 
    org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115) 
    org.neo4j.kernel.impl.transaction.XaDataSourceManager.start(XaDataSourceManager.java:164) 
    org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:507) 
    org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115) 
    org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:339) 
    org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:59) 
    org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:90) 
    org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:199) 
    com.socialtwist.rnet.web.RnetNeo4jServlet.init(RnetNeo4jServlet.java:44) 

我們已經部署了16 GB RAM的服務器上的應用程序,並給予Tomcat的12 GB的堆空間查詢圖形。 Neo4J有什麼其他調整選項可以在合理的響應時間內完成這項工作?

+1

所以它不啓動或者你只看到問題,當你發送一個查詢?有一點需要記住的是,Neo4j使用的內存是堆+ MMIO,所以我可能會減小堆大小,所以你幾乎不佔用整個機器的所有內存。 你能分享你正在運行的查詢嗎? –

+0

tomcat的最大堆大小爲12 GB,而服務器總共有16 GB的內存,所以似乎有足夠的空閒內存用於內存映射IO(除了tomcat之外沒有其他主要進程正在運行)。 我試圖運行這個基本查詢: START裁判=節點(*)MATCH裁判< - [r:IS_FRIEND_OF] - (referrer:用戶)WHERE裁判:1677523' RETURN referrer; –

+0

順便說一句,tomcat進程確實啓動了,但它開始在查詢數據庫時發生內存不足錯誤。 –

回答

2

圖表中有多少個標籤?你的圖表和查詢有些問題。我認爲你混淆標籤(類型)與編號的

創建索引:User(id);

MATCH(裁判:用戶)< - [:IS_FRIEND_OF] - (referrer:User)WHERE referee.id = 1677523 RETURN referrer;

應該立即回報你固定你圖模型後,即刪除了所有數字標籤

+0

謝謝,這似乎是問題。我已經嘗試了一個更大的圖形,其中有50068607個節點和84252339個邊。它在2-3毫秒內返回查詢。 –