2012-04-23 4 views
3

Я пытаюсь вывести данные с помощью Pellet, но мое приложение всегда вылетает во время рассуждений из-за «OutOfMemoryError: Java heap space».OutOfMemoryError using Pellet as Reasoner

Как предложено в другом месте я уже пытался увеличить размер кучи и в настоящее время я использую эти параметры виртуальной машины: «-XX: MaxPermSize = 256m -Xmx6144m». Кроме того, я должен установить «PelletOptions.USE_CONTINUOUS = true», но до сих пор я мог только задерживать аварии в течение нескольких минут. (Самый длинный пробег: 30 мин.).

Я храню данные в трипестере Jena TDB. Его общий размер составляет 170 мб и состоит из 962117 заявлений. Онтология была смоделирована в Protege, и нет никаких несоответствий, если аргументировано с помощью Hermit или Fact ++ (конечно, данных нет в этой точке). Утверждения, которые я хотел бы сделать: , были сделаны с использованием эквивалентных классов (например: A и (hasX some X)), обратные свойства (hasX < -> isXOf) и некоторые транзитивные свойства . Существует 55 классов: 14 корневых классов, 11 эквивалентных классов (все подтипы одного корневого класса). В настоящий момент к триесту добавлены экземпляры 14 классов .

Я также использовал pellint анализировать свою онтологию, но я не уверен, выводы сделать из этого результата:

[Untyped classes] 
- http://www.w3.org/2002/07/owl#AllDisjointClasses 

[Untyped object roles] 
- http://www.w3.org/2002/07/owl#topObjectPriority 
- http://www.w3.org/2002/07/owl#members 

[Untyped datatype roles] 
- http://www.w3.org/2002/07/owl#qualifiedCardinality 

[Untyped individuals] 
- 4 BNodes 

Это мой код для создания InfModel:

Dataset dataset = TDBFactory.createDataset(..); 
Model model = dataset.getDefaultModel(); 

OntModel ont = ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC,model); 
ont.read("file:.." , "RDF/XML"); 

PelletOptions.USE_CONTINUOUS_RULES = true; 
Reasoner reasoner = PelletReasonerFactory.theInstance().create(); 
reasoner = reasoner.bindSchema(ont); 

InfModel infModel = infModel = ModelFactory.createInfModel(reasoner, model); 

и это по существу, как я запрашиваю данные:

QueryExecution qe = QueryExecutionFactory.create("SELECT ...", infModel); 
Resultset rs = qe.execSelect(); 

while(rs.hasNext()) 
{ 
    QuerySolution sol = rs.nextSolution(); 
    ... 
} 
qe.close(); 

Как вы может видеть, что я получил различные исключения при запросе данных , подготовке или проверке InfModel. Есть ли у вас какие-либо идеи, что еще я мог бы попытаться разрешить эту ошибку?

java.lang.OutOfMemoryError: Java heap space 
at java.util.Arrays.copyOf(Unknown Source) 
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) 
at java.lang.AbstractStringBuilder.append(Unknown Source) 
at java.lang.StringBuilder.append(Unknown Source) 
at java.net.URLStreamHandler.parseURL(Unknown Source) 
at sun.net.www.protocol.file.Handler.parseURL(Unknown Source) 
at java.net.URL.<init>(Unknown Source) 
at java.net.URL.<init>(Unknown Source) 
at sun.misc.URLClassPath$FileLoader.getResource(Unknown Source) 
at sun.misc.URLClassPath.getResource(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCheck.warn(QueryIteratorCheck.java:114) 
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCheck.dump(QueryIteratorCheck.java:95) 
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCheck.checkForOpenIterators(QueryIteratorCheck.java:68) 
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCheck.close(QueryIteratorCheck.java:50) 
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.closeIterator(QueryIteratorWrapper.java:50) 
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.close(QueryIteratorBase.java:184) 
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorCloseable.close(QueryIteratorCloseable.java:39) 
at com.hp.hpl.jena.sparql.engine.QueryExecutionBase.close(QueryExecutionBase.java:180) 


java.lang.OutOfMemoryError: Java heap space 
at shared.SharedObjectFactory.build(SharedObjectFactory.java:303) 
at aterm.pure.PureFactory.makeAppl(PureFactory.java:191) 
at aterm.pure.PureFactory.makeAppl(PureFactory.java:185) 
at aterm.pure.PureFactory.makeAppl(PureFactory.java:228) 
at org.mindswap.pellet.utils.ATermUtils.makeLiteral(ATermUtils.java:245) 
at org.mindswap.pellet.ABox.addLiteral(ABox.java:1696) 
at org.mindswap.pellet.tableau.completion.rule.SomeValuesRule.applySomeValuesRule(SomeValuesRule.java:174) 
at org.mindswap.pellet.tableau.completion.rule.SomeValuesRule.apply(SomeValuesRule.java:64) 
at org.mindswap.pellet.tableau.completion.rule.AbstractTableauRule.apply(AbstractTableauRule.java:64) 
at org.mindswap.pellet.tableau.completion.SROIQStrategy.complete(SROIQStrategy.java:157) 
at org.mindswap.pellet.ABox.isConsistent(ABox.java:1423) 
at org.mindswap.pellet.ABox.isConsistent(ABox.java:1260) 
at org.mindswap.pellet.KnowledgeBase.consistency(KnowledgeBase.java:1987) 
at org.mindswap.pellet.KnowledgeBase.isConsistent(KnowledgeBase.java:2061) 
at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:247) 
at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:230) 
at com.hp.hpl.jena.rdf.model.impl.InfModelImpl.prepare(InfModelImpl.java:89) 


java.lang.OutOfMemoryError: Java heap space 
at org.mindswap.pellet.tableau.branch.DisjunctionBranch.tryBranch(DisjunctionBranch.java:197) 
at org.mindswap.pellet.tableau.branch.Branch.tryNext(Branch.java:117) 
at org.mindswap.pellet.tableau.completion.rule.ChooseRule.apply(ChooseRule.java:82) 
at org.mindswap.pellet.tableau.completion.rule.ChooseRule.apply(ChooseRule.java:56) 
at org.mindswap.pellet.tableau.completion.rule.AbstractTableauRule.apply(AbstractTableauRule.java:64) 
at org.mindswap.pellet.tableau.completion.SROIQStrategy.complete(SROIQStrategy.java:157) 
at org.mindswap.pellet.ABox.isConsistent(ABox.java:1423) 
at org.mindswap.pellet.ABox.isConsistent(ABox.java:1260) 
at org.mindswap.pellet.KnowledgeBase.consistency(KnowledgeBase.java:1987) 
at org.mindswap.pellet.KnowledgeBase.isConsistent(KnowledgeBase.java:2061) 
at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:247) 
at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:230) 
at org.mindswap.pellet.jena.PelletInfGraph.validate(PelletInfGraph.java:564) 
at com.hp.hpl.jena.rdf.model.impl.InfModelImpl.validate(InfModelImpl.java:111) 
+0

Это крест размещен по адресу: http://answers.semanticweb.com/questions/15989/outofmemoryerror-using-pellet-as-reasoner – Michael

ответ

1

против infModel Запрос, по-видимому, вызванного Пелле, чтобы генерировать сотни thoundands из owl:differentFrom заявлений. Решение было использовать ModelExtractor:

ModelExtractor ext = new ModelExtractor(inf); 
Model m = ext.extractModel(); 
QueryExecution qe = QueryExecutionFactory.create("SELECT ...", m);