Spring Boot - Oracle - 内存堆问题

Spring boot - Oracle - Memory heap issue

提问人:user666 提问时间:11/14/2023 最后编辑:user666 更新时间:11/14/2023 访问量:37

问:

我们有一个 spring boot 应用程序,它使用 Hikari 创建 oracle 连接以进行连接池。它共有 9 个实体。使用以下 VM 选项启动应用:-Xmx250M -Xms10M。启动应用后,它始终保留 101 MB 堆内存,如 Visual VM 中所示。

enter image description here

当使用 spring 数据(在应用程序属性中,未创建任何编程数据源)通过 oracle 连接创建 spring boot 应用程序时,大约需要 58 MB。

enter image description here

在springboot类似的应用程序中,什么堆内存通常被认为是正常的?此外,X Spring Boot 应用程序中的嵌入式 Tomcat 服务器是否可以比在外部 Tomcat 服务器上运行的 X Spring Boot 应用程序使用更多的堆内存?

Hikari 配置:

allowPoolSuspension.............false
autoCommit......................true
catalog.........................none
connectionInitSql...............none
connectionTestQuery............."SELECT 1 FROM DUAL"
connectionTimeout...............6000000
dataSource......................none
dataSourceClassName.............none
dataSourceJNDI..................none
driverClassName................."oracle.jdbc.OracleDriver"
healthCheckProperties...........{}
healthCheckRegistry.............none
idleTimeout.....................600000
initializationFailTimeout.......1
isolateInternalQueries..........false
jdbcUrl.........................jdbc:oracle:thin:@10.20.0.8:1521/BBB
leakDetectionThreshold..........0
maxLifetime.....................0
maximumPoolSize.................30
metricRegistry..................none
metricsTrackerFactory...........none
minimumIdle.....................5
readOnly........................false
registerMbeans..................false
scheduledExecutor...............none
schema..........................none
threadFactory...................internal
transactionIsolation............default
validationTimeout...............5000
java oracle spring-boot heap-memory hikaricp

评论

0赞 g00glen00b 11/14/2023
从你的描述来看,我什至无法判断是否真的有问题。当然,您的应用程序可能会占用 300MB 的堆内存,但这很糟糕吗?也许它创建了很多现在可以清理的对象。但是,如果您将堆大小配置为非常大,也许 JVM 决定 GC 还不应该启动。只有当即使在 GC 之后堆内存量仍然很高,或者它是否继续上升时,我才会开始担心。但是您的问题中没有这些信息,因此这几乎是无法回答的。
0赞 user666 11/14/2023
当我们在同一台机器上运行多个Spring Boots时,每个Spring Boots都会增加300个,当我们开始接收API调用时,它会越来越多。这种情况在微服务架构中通常被认为是正常的吗?如果未调用应用程序,则被视为正常的内存堆是什么?
0赞 g00glen00b 11/14/2023
这可能是正常行为,具体取决于您配置堆限制的方式。但同样,您仍然没有包含该信息,因此这个问题仍然无法回答。
0赞 M. Deinum 11/14/2023
在不知道您的配置、实体数量和/或数据库结构的情况下。这个问题是无法回答的。300MB可能很多,但根据您的应用程序,这可能没有那么多。这里没有经验法则。
0赞 user666 11/14/2023
调整了我的问题。谢谢

答: 暂无答案