【发布时间】:2017-02-08 09:46:45
【问题描述】:
问题:
我在我的一个项目中使用 UIMA Ruta (v2.3.1),但现在我遇到了一个问题: 内存超过了可解释的大小,但无法弄清楚这个问题在哪里,除了类org.apache.uima.ruta.rule.RuleElementMatch,占了50%内存使用量。
我在我的项目中调用 UIMA Ruta 的 JavaAPI 来设置分析引擎。当我向该引擎发送大约 400kbyte 大小的文本进行分析时,该进程阻塞了大约 700MB 内存,但 GC 没有任何机会释放一些空间。
Ruta 项目:
给定的 Ruta 规则是用 REGEXP 结构构建的,但理论上它们应该会减少内存使用量,因为在特定端点有 UNMARKALL 语句。
是否有人面临同样的高内存消耗情况或有任何建议的解决方案?使用低内存配置文件作为 uima 本身的建议是不可能的,因为响应时间已经在 30 秒左右。增加 JVM 的最大内存不是一种选择。
【问题讨论】:
-
你使用 Java API 的哪一部分?
-
REGEXP 结构是什么意思? REGEXP 条件还是简单的正则表达式规则? UNAMRKALL 行动遵循什么样的规则?端点是什么意思?
-
我应该如何理解 JavaAPI 的问题?我们正在按照该 API 的文档中的描述构建一个 AnalysisEngine,添加所有需要的类型系统并推送一个文本以使用 process-method 对该引擎进行分析。正则表达式结构位于我们组合规则的条件部分,就像以下示例一样: (ANY{REGEXP("(H|h)ello")} ANY{REGEXP("(Mr.|Mrs.)" )}){ NOT(IS(Greetings)) ->MARK(Greetings)}
-
我们连续有六个用于我们要检查的不同语言示例,毕竟,我们通常希望在其中减少类似 ->UNMARKALL(Annotation, {Greetings}) 的 UNMARKALL注释的数量仍在内存中,但这并不能解决问题。我们有这个 400Kbyte 的大文本,将使用 700MB 内存的平均负载进行分析,如果我们提取这段文本的一部分,我们希望减少这个负载,我们的 JVM 有点崩溃,因为内存被这个可疑的 RuleElementMatch 填满类。
-
我们修复了一些错误,发现了一些 ruta 语句,我们是一些记忆嫌疑人。可以看到改进,但内存仍在泄漏。正如我们所知道的,RutaBasic 类存在一个问题,即保留了一些数组,这些数组只填充了一些单个元素。主要部分在运行时仍然是空的。我们在您的 Jira 中创建了一个问题,UIMA-5306 用于此案例
标签: java memory memory-leaks uima ruta