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

Memory consumption behaviour at runtime of a Spring (Kotlin) application

我用 Kotlin 和协程编写了一个 Spring 启动应用程序。它利用 springs reactive-stack (Webflux)。 在看运行时间表演的时候,有点被宠坏了。

图像显示内存和 CPU 随着时间的消耗。 一开始,我 运行 进行了渗透测试,结果 CPU 使用率高,内存不断增加。令我困惑的是,即使应用程序空闲时,内存使用量也不会再减少。

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

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

没有更多的信息,这不可能说。

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

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

如果您想确定,您应该 运行 多试几次。如果您的应用程序运行良好,您会看到内存图在堆开始变满时下降,然后又逐渐上升。这会生成 characteristic "sawtooth" 内存使用图。