[
https://issues.apache.org/jira/browse/JENA-1337?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16010785#comment-16010785
]
Dave Reynolds commented on JENA-1337:
-------------------------------------
Since you say the ontologies are "huge" they may simply be beyond the scale the
rule reasoners can cope with. In which case this is not a bug such much as a
scalability limitation.
However, your example code creates an ontology model with a default reasoner
(which will be RDFS) and then layers a new reasoner over the top. That will be
very expensive. Just create the OntModel with the appropriate reasoner in the
first place - {{OntModelSpec.OWL_MEM_MICRO_RULE_INF}} in this case. Or if you
really want a separate InfModel over your own then may the base OntModel a
non-reasoner configuation {{OntModelSpec.OWL_MEM}}. Let us know if this improve
things at all.
Note that writing on an inferred ontology will always be expensive. If you only
want specific inferences then asking more specific queries and writing the
results of those out can enable you to do useful work even with ontologies
that are pushing the boundaries of what the simple rule reasoners can manage.
> Trying to write an infered model to a String or a file never ends
> -----------------------------------------------------------------
>
> Key: JENA-1337
> URL: https://issues.apache.org/jira/browse/JENA-1337
> Project: Apache Jena
> Issue Type: Bug
> Affects Versions: Jena 3.1.1, Jena 3.2.0
> Reporter: Gilles Habran
>
> Good morning,
> I am trying to print an infered model but it never ends.
> The ontologies I am using are huge and can be found here :
> http://publications.europa.eu/mdr/cdm/index.html
> I tried with an OWL Reasoner or a Micro OWL Reasoner.
> I created a small project with a Main class, a model and the ontologies here
> to show the problem : https://gitlab.com/gillouche/jena-perf
> The thread dump shows that kind of stacktrace:
> {code:java}
> "main" #1 prio=5 os_prio=0 tid=0x00007f22f403f000 nid=0x3330 runnable
> [0x00007f22fbc92000]
> java.lang.Thread.State: RUNNABLE
> at java.util.LinkedList.remove(LinkedList.java:364)
> at
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine.detach(LPBRuleEngine.java:233)
> - locked <0x00000005cfe72990> (a
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine)
> at
> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.close(LPInterpreter.java:168)
> at
> org.apache.jena.reasoner.rulesys.impl.Generator.setComplete(Generator.java:160)
> at
> org.apache.jena.reasoner.rulesys.impl.Generator.postCompletionCheckScan(Generator.java:371)
> at
> org.apache.jena.reasoner.rulesys.impl.Generator.checkForCompletions(Generator.java:313)
> at
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine.pump(LPBRuleEngine.java:364)
> at
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator.moveForward(LPTopGoalIterator.java:107)
> - locked <0x00000005d58aa060> (a
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator)
> - locked <0x00000005cfe72990> (a
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine)
> at
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator.hasNext(LPTopGoalIterator.java:223)
> at
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
> at
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
> at
> org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
> at
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
> at
> org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
> at
> org.apache.jena.util.iterator.Map1Iterator.hasNext(Map1Iterator.java:49)
> at
> org.apache.jena.util.iterator.NiceIterator.asSet(NiceIterator.java:208)
> at
> org.apache.jena.util.iterator.NiceIterator.toSet(NiceIterator.java:199)
> at org.apache.jena.graph.GraphUtil.listSubjects(GraphUtil.java:50)
> at
> org.apache.jena.riot.writer.RDFJSONWriter.output(RDFJSONWriter.java:76)
> at
> org.apache.jena.riot.writer.RDFJSONWriter.output(RDFJSONWriter.java:51)
> at
> org.apache.jena.riot.writer.RDFJSONWriter.write(RDFJSONWriter.java:63)
> at
> org.apache.jena.riot.adapters.RDFWriterRIOT.write(RDFWriterRIOT.java:74)
> at org.apache.jena.rdf.model.impl.ModelCom.write(ModelCom.java:358)
> at Main.main(Main.java:72)
> {code}
> In a Java Mission Control, the LinkedList.remove() hot methods take 80%.
> If I don't infer the model, I can print it without any problem.
> Note : I have another project using SHACL to validate an infered model
> against shapes. A simple model can be validated with SHACL but an infered
> model cannot be. The stacktrace of the thread dumps block with the same code
> (LPInterpreter.close() then LinkedList.remove()).
> Here is the stacktrace from a thread dump:
> {code:java}"http-nio-auto-1-exec-1" #18 daemon prio=5 os_prio=0
> tid=0x00007f09592c4000 nid=0x6537 runnable [0x00007f0934e79000]
> java.lang.Thread.State: RUNNABLE
> at java.util.LinkedList.remove(LinkedList.java:364)
> at
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine.detach(LPBRuleEngine.java:233)
> - locked <0x00000005f3da67e0> (a
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine)
> at
> org.apache.jena.reasoner.rulesys.impl.LPInterpreter.close(LPInterpreter.java:168)
> at
> org.apache.jena.reasoner.rulesys.impl.Generator.setComplete(Generator.java:160)
> at
> org.apache.jena.reasoner.rulesys.impl.Generator.postCompletionCheckScan(Generator.java:371)
> at
> org.apache.jena.reasoner.rulesys.impl.Generator.checkForCompletions(Generator.java:313)
> at
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine.pump(LPBRuleEngine.java:364)
> at
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator.moveForward(LPTopGoalIterator.java:107)
> - locked <0x00000005f890e638> (a
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator)
> - locked <0x00000005f3da67e0> (a
> org.apache.jena.reasoner.rulesys.impl.LPBRuleEngine)
> at
> org.apache.jena.reasoner.rulesys.impl.LPTopGoalIterator.hasNext(LPTopGoalIterator.java:223)
> at
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
> at
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
> at
> org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
> at
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
> at
> org.apache.jena.util.iterator.FilterIterator.hasNext(FilterIterator.java:55)
> at
> org.apache.jena.util.iterator.Map1Iterator.hasNext(Map1Iterator.java:49)
> at
> org.apache.jena.util.iterator.WrappedIterator.hasNext(WrappedIterator.java:90)
> at
> org.topbraid.spin.util.JenaUtil.addTransitiveSubjects(JenaUtil.java:171)
> at
> org.topbraid.spin.util.JenaUtil.addTransitiveSubjects(JenaUtil.java:178)
> at
> org.topbraid.spin.util.JenaUtil.getAllTransitiveSubjects(JenaUtil.java:240)
> at
> org.topbraid.spin.util.JenaUtil.getAllTransitiveSubjects(JenaUtil.java:435)
> at org.topbraid.spin.util.JenaUtil.getAllSubClasses(JenaUtil.java:377)
> at org.topbraid.spin.util.JenaUtil.getAllInstances(JenaUtil.java:359)
> at org.topbraid.shacl.util.SHACLUtil.getTargetNodes(SHACLUtil.java:536)
> at
> org.topbraid.shacl.validation.ValidationEngine.validateAll(ValidationEngine.java:307)
> at
> org.topbraid.shacl.validation.ValidationUtil.validateModel(ValidationUtil.java:65)
> at
> eu.europa.ec.opoce.cellar.validation.impl.TopBraidShaclValidationService.validate(TopBraidShaclValidationService.java:25)
> at
> eu.europa.ec.opoce.cellar.validation.controller.ValidationController.validate(ValidationController.java:72)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at
> org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
> at
> org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
> at
> org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
> at
> org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
> at
> org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
> at
> org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
> at
> org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
> at
> org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
> at
> org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
> at
> org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
> at
> org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110)
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105)
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)
> at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
> at
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
> at
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
> at
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
> at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
> at
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
> - locked <0x00000005eddcf178> (a
> org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> at java.lang.Thread.run(Thread.java:748){code}
> Would you have any idea what's happening?
> Thank you.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)