2017-07-01 14 views
1

私の目標は、屋外のサイトからすべてのドキュメントを100000のドキュメントで取得することです。 私はOpenCmisライブラリを使用しました。 私の問題は、このプロシージャではjava.lang.OutOfMemoryError:Javaヒープ・スペースが得られることです。opencmisのJava OutOfMemoryErrorメソッドgetdescendants(-1)

サイト内のすべてのドキュメントの合計サイズは500GBです。

これはコードです:

CmisObject cmisObject = session.getObjectByPath(path); 
FolderImpl sitoFolder = (FolderImpl) cmisObject; 
List<Tree<FileableCmisObject>> sitoFolderDescendants = sitoFolder.getDescendants(-1); 

これは私のスタックトレースのエラーです:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
at java.util.HashMap.newNode(HashMap.java:1742) 
at java.util.HashMap.putVal(HashMap.java:630) 
at java.util.HashMap.put(HashMap.java:611) 
at org.apache.chemistry.opencmis.commons.impl.XMLWalker.handleExtensionLevel(XMLWalker.java:128) 
at org.apache.chemistry.opencmis.commons.impl.XMLWalker.handleExtensionLevel(XMLWalker.java:161) 
at org.apache.chemistry.opencmis.commons.impl.XMLWalker.handleExtensionLevel(XMLWalker.java:161) 
at org.apache.chemistry.opencmis.commons.impl.XMLWalker.handleExtension(XMLWalker.java:112) 
at org.apache.chemistry.opencmis.commons.impl.XMLWalker.walk(XMLWalker.java:58) 
at org.apache.chemistry.opencmis.commons.impl.XMLConverter$18.read(XMLConverter.java:2198) 
at org.apache.chemistry.opencmis.commons.impl.XMLConverter$18.read(XMLConverter.java:2188) 
at org.apache.chemistry.opencmis.commons.impl.XMLWalker.walk(XMLWalker.java:56) 
at org.apache.chemistry.opencmis.commons.impl.XMLConverter.convertObject(XMLConverter.java:1102) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseElement(AtomPubParser.java:332) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseEntry(AtomPubParser.java:284) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseFeed(AtomPubParser.java:243) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseChildren(AtomPubParser.java:372) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseElement(AtomPubParser.java:339) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseEntry(AtomPubParser.java:284) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseFeed(AtomPubParser.java:243) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseChildren(AtomPubParser.java:372) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseElement(AtomPubParser.java:339) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseEntry(AtomPubParser.java:284) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseFeed(AtomPubParser.java:243) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseChildren(AtomPubParser.java:372) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseElement(AtomPubParser.java:339) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseEntry(AtomPubParser.java:284) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseFeed(AtomPubParser.java:243) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseChildren(AtomPubParser.java:372) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseElement(AtomPubParser.java:339) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseEntry(AtomPubParser.java:284) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parseFeed(AtomPubParser.java:243) 
at org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser.parse(AtomPubParser.java:109) 
+1

[Xmxオプション](http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html#BABHDABI)を使用して、使用可能なメモリプールのサイズを増やすか、それは、より大きなコンピュータを購入する。 –

+0

ソリューションがXmxオプションを増やすことはできません。 しかし、どのくらいのメモリが必要かを理解する必要があります:getDescendantsメソッド。 –

+0

はい、解決策です。 –

答えて

2

私は同じ時間内のすべてのノードを取得するには良いアイデアであるとは思いません。

CMISには、クエリをページ付けするいくつかの方法があります。ページネーションを使用すると、定義済みの数のドキュメントを一度に取得してからメモリを解放することができます。

getDescendantsを使用しないでください(-1)例えばApache CMIS: Paging query result