2017-07-01 4 views
1

Mein Ziel ist es, alle Dokumente von einer Alfresco-Site mit 100000 Dokumenten zu bekommen. Ich habe OpenCmis-Bibliotheken verwendet. Mein Problem ist, dass ich mit dieser Prozedur einen java.lang.OutOfMemoryError: Java-Heap-Space bekomme.Java OutOfMemoryError für opencmis-Methode getdescendants (-1)

Die Gesamtgröße aller Dokumente auf der Website ist: 500 GB.

Dies ist der Code:

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

Das ist mein Fehler Stacktrace:

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

Versuchen Sie, die Größe des verfügbaren Speicherpools mit der [Xmx-Option] (http://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html#BABHDABI) zu erhöhen oder zu scheitern kaufen Sie einen größeren Computer. –

+0

Ist keine Lösung Xmx Option zu erhöhen. Aber ich muss verstehen, wie viel Speicher die Methode: getDescendants benötigt. –

+0

Ja, es ist eine Lösung. –

Antwort

2

Ich glaube nicht, dass es eine gute Idee ist, alle Knoten in der gleichen Zeit zu bekommen.

CMIS bietet mehrere Möglichkeiten zum Paginieren einer Abfrage. Mit Paginierung können Sie eine vordefinierte Anzahl von Dokumenten gleichzeitig abrufen und dann den Speicher freigeben.

Siehe zum Beispiel Apache CMIS: Paging query result