Oracle TemporaryLobs导致内存泄漏

pwuypxnk  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(174)

我们遇到了一个使用Oracle 21 c作为内存的Sping Boot 应用程序(Sping Boot 2.7.x)的问题。在执行过程中,我们运行在一系列由于使用Blob而导致的OoM中。
我们做了一些应用程序转储,结果如下


的数据
我们已经看到了blob对象是如何在temporaryLobs列表中持久化的,该列表直接由Oracle驱动程序管理。我们不可能使用Spring Jdbc(5.3.25)库与此列表交互,该库用于与Oracle数据库接口。
有人能帮我们吗?
下面是我们的pom.xml的一个片段

<dependency>
    <groupId>com.oracle.ojdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version>
</dependency>

<dependency>
    <groupId>com.oracle.database.nls</groupId>
    <artifactId>orai18n</artifactId>
    <version>21.5.0.0</version>
</dependency>

字符串

yh2wf1be

yh2wf1be1#

参见this similar questionthis onethis Oracle support document。还有this Ask Tom articlethis blog post
一个简短的答案是,当你的Java代码使用临时的blob时,它并没有调用java.sql.Blob.free(),而使用连接池,数据库会话永远不会被真正销毁,所以所有的blob都留在内存中,直到你重新启动整个应用程序。你需要显式地释放每个临时的blob。

相关问题