Saxon转换器版本11.3 -内存泄漏



我从saxon transformer version 9升级到11.3。我的应用程序面临内存泄漏问题。

  • Java spring boot application

  • 应用程序是多线程的

  • 应用程序有10个不同的转换器和处理不同的xsl

  • 占用的内存随着时间的推移而增长,并占用所有可用内存

  • 尝试重复使用变压器,每次转换都使用新的变压器。(没有运气)

正如Martin所说,这类问题更适合在Saxonica支持论坛而不是这里讨论。原因是它可能涉及一个反复的调查过程,这与StackOverflow的问答格式不太适合(如果我没有立即得到答案,有人可能会将我的回答标记为"不是答案")。

术语"内存泄漏";在应用于Java时相当不准确。内存泄漏是指不再被引用的对象没有释放它们的内存,但这里的问题(几乎可以肯定)是,当您不希望对象被引用时,对象仍然被引用。

要调查问题,您需要获得堆转储并找出问题所在。很明显,一个特定类有数百万个不应该存在的对象。堆转储分析器将使您能够找出这些对象是从哪里引用的,这将解释为什么它们没有被垃圾收集。

您可以通过获取堆转储并将其发送给Saxonica(如果您不能自己分析它),或者通过创建失败应用程序的再现并发送它来继续。考虑到这是一个相当复杂的应用程序,我的猜测是,第一种方法对您来说会更容易。

我们试图在我们准备提供的支持水平上画一些界限。其中一个界限是,我们不会尝试运行具有复杂依赖关系的repro,例如,它需要安装第三方产品。包括Spring。

注意:不同的人采用不同的策略来解决问题,但就我个人而言,当我看到类似这样的东西在版本X中有效,而在版本Y中不起作用时,我通常会从版本Y的第一原则进行调查,而不是探索发生了什么变化。但也有例外,例如,我们知道Saxon 11使用了一种全新的方法来进行基于编目的URI解析,这有时会给我们一些线索,让我们知道哪些地方值得一看。所以,X版本是什么可能并不重要,但您应该知道&;Saxon 9&;描述了从2008年的9.0到2020年的9.9的一系列10个主要版本,因此它不是一个非常有用的基线定义。

最新更新