首页 > 解决方案 > 当 Web 应用程序关闭时,Jena 离开 mem.FourTupleMap 和 mem.FourTupleMap.ThreeTupleMap

问题描述

问候耶拿大师

我编写了一个小型 Jersey (3.0.3) Web 应用程序,将从一堆静态文件创建的模型加载到内存数据集中 (Jena 4.2.0)

ds = DatasetFactory.createTxnMem();
Model m = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RDFS_INF);

那么,一堆

RDFDataMgr.read(m, f.getAbsolutePath());

最后

Reasoner owl = ReasonerRegistry.getOWLReasoner();       
ds.setDefaultModel(ModelFactory.createInfModel(owl, m));

在 Tomcat 10 中运行的小型 Web 应用程序基本上只是查询该数据库并以各种格式返回数据集内容的位。但是我什至在进入查询部分之前就遇到了问题(即,我在查询之前启动应用程序并关闭)

数据集的加载(上图)发生在ServletContextListener.contextInitialized阶段,我认为我在 contextDestroyed. 存储在单例中的数据集以及灯熄灭时

TDBFactory.release(ds);
ds.close();

但是,在日志中,当我关闭应用程序时,我会得到一个列表

24-Oct-2021 12:40:23.743 SEVERE [Thread-2] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [gsip] created a ThreadLocal with key of type [java.lang.ThreadLocal.SuppliedThreadLocal] (value
[java.lang.ThreadLocal$SuppliedThreadLocal@3ddefd3b]) and a value of type [org.apache.jena.sparql.core.mem.FourTupleMap.ThreeTupleMap] (value [org.apache.jena.sparql.core.mem.FourTupleMap$ThreeTupleMap@4f7ca31b]) but failed to remove it
when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
24-Oct-2021 12:40:23.747 SEVERE [Thread-2] org.apache.catalina.loader.WebappClassLoaderBase.checkThreadLocalMapForLeaks The web application [gsip] created a ThreadLocal with key of type [java.lang.ThreadLocal.SuppliedThreadLocal] (value
[java.lang.ThreadLocal$SuppliedThreadLocal@3ddefd3b]) and a value of type [org.apache.jena.sparql.core.mem.FourTupleMap.ThreeTupleMap] (value [org.apache.jena.sparql.core.mem.FourTupleMap$ThreeTupleMap@4f7ca31b]) but failed to remove it
when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.

注意,(不确定是否相关)有两种类型:

org.apache.jena.sparql.core.mem.FourTupleMap.ThreeTupleMaporg.apache.jena.sparql.core.mem.FourTupleMap, 总是前者的 1 对后者的 2。只需加载数据集就会创建 3mem.FourTupleMap.ThreeTupleMap和 6mem.FourTupleMap

该列表将随着更多的互动而增长,但似乎最高为 99。

我在 Eclipse(Windows 10、jdk 15)或 docker(使用tomcat:jre11-openjdk-slim-buster)中有同样的问题

任何提示我做错了什么?

谢谢

标签: javatomcatjena

解决方案


推荐阅读