spring - Spring (Kotlin) 应用程序运行时的内存消耗行为

标签 spring spring-boot kotlin spring-webflux kotlin-coroutines

我用 Kotlin 和 Coroutine 编写了一个 Spring Boot 应用程序。它利用 springs react 堆栈 (Webflux)。 当查看运行时性能时,我有点被宠坏了。

enter image description here

该图显示了一段时间内的内存和 CPU 消耗情况。 一开始,我运行渗透测试,结果导致 CPU 使用率很高,内存不断增加。让我困惑的是,即使应用程序空闲,内存使用量也不会再减少。

这是正常行为还是应用程序有问题?

最佳答案

Is this normal behaviour or is there something wrong with the application?

没有更多信息,就无法确定。

这可能是正常行为。 JVM 中的内存由garbage collection 释放。 。垃圾收集器清理不再使用的对象。它有自己的规则来决定何时以及如何这样做。特别是,它会在应用程序需要时尝试释放内存。如果应用程序处于空闲状态并且不需要任何内存来分配新对象,则垃圾收集器可能不会运行。

另一方面,您的应用程序可能仍保留对某些数据的引用,从而阻止其被垃圾收集。如果应用程序中有任何变量或数据结构仍然保留对对象的引用,则该对象将不会被垃圾收集。随着时间的推移,这最终意味着垃圾收集器将无法释放任何新内存,并且应用程序将崩溃。

如果您想确定,您应该尝试运行测试几次。如果您的应用程序运行良好,您将看到当堆开始变满时内存图表会立即下降,然后再次逐渐上升。这导致 characteristic "sawtooth"内存使用图。

关于spring - Spring (Kotlin) 应用程序运行时的内存消耗行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68714326/

相关文章:

spring - 不允许使用 Apache Camel REST DSL 405 方法

java - Spring:@Autowired 不与 ApplicationContext 一起工作

java - Spring Boot 不从 application.properties 加载用户名

android - MPAndroidChart:带间隙的水平条形图

java - Gradle 依赖排除不适用于传递依赖

java - 如何使用 Spring Boot 指定 BeanNamingStrategy?

java - Spring boot 在 tomcat 上部署为 WAR,如何为不同的配置文件外部化 application.properties(Dev、Test、Staging、Prod)

同一项目中的 Java Spring Boot MVC 和 CLI API

Kotlin - 只读文件中的前 n 行

kotlin - Kotlin-字 rune 字与预期的Int类型不一致