使用Jena + PermGen空间的Pellet Reasoner

时间:2013-07-18 00:18:43

标签: java out-of-memory jena reasoning pellet

我正在使用Jena运行Pellet,如下所示:

public void storeInferredModel(Data data) {
    System.out.println("creating inferred dataset ");
    Dataset dataset = TDBFactory.createDataset(data.getInferredResultsPath());
    System.out.println("creating OntModel ");
    OntModel Infmodel = ModelFactory.createOntologyModel(
                          PelletReasonerFactory.THE_SPEC, 
                          dataset.getNamedModel(this.URL));
    System.out.println("adding schema (OWL) to OntModel");
    Infmodel.add(this.owl);
    System.out.println("adding data (RDF) to OntModel ");
    Infmodel.add(data.tdb);
    System.out.println("creating ModelExtractor ");
    ModelExtractor ext = new ModelExtractor(Infmodel);
    System.out.println("replacing OntModel by the Extracted Model");
    dataset.replaceNamedModel(this.URL, ext.extractModel());
    System.out.println("saving inferred model");
    Infmodel.close();
    System.out.println("closing inferred dataset");
    dataset.close();
}

我在Pellet Reasoner with Jena下发了上一篇文章。 我的TDB或原始数据是2.7G。我一直在运行推理器反对TDB,但我遇到了“PermGen spaces java”的问题,虽然我给程序提供了大约70G内存,而推理器只采用了30G然后崩溃了。换句话说,它没有达到计算机内存的最大值

我正在运行Linux和Java 64位,服务器中有83 G内存。我已经坚持了一个星期。

1 个答案:

答案 0 :(得分:-1)

Pellet执行 in-memory 的推理。与TDB一起使用它不会像我怀疑你认为的那样工作; TDB只是存储,Pellet会将推理所需的任何内容提取到内存中。

此外,告诉我们您的数据是2.7G并不是非常有用。 TBox的表现力对推理性能的影响与大小相同或更多(磁盘上的大小无用,知道三元组的数量是一个更好的指标)。

因此,了解TBox中的内容对于更好的诊断至关重要。鉴于我们不知道任何关于你正在为Pellet提供什么,我只能猜测TBox非常具有表现力,或者非常大,或两者兼而有之。

Pellet可以使用大型本体,它可以很好地处理NCI词库,但是TBox是无法处理的。 DL推理很难,甚至比较难。

您可能还需要查看DL手册,以便对一些有用的背景材料进行详细审核。

相关问题