我们一直在诊断 Spring Boot 应用程序中明显的内存泄漏。我们无法在代码中找到任何突出的内容,但是使用 VisualVM 的内存分析器,我们发现了一些奇怪的东西。当 Controller 受到请求时,将创建该 Controller 的新实例。如下所示,这些 Controller 应该是单例的。此外,这些多余的实例永远不会被垃圾收集并不断堆积。这些 Controller 在代码中的任何地方都没有引用,并且仅由 Spring 魔法首先创建的任何内容创建。
所以我的问题是:什么会导致像这样的 Spring 组件开始出现这样的行为,以及我将如何调试它?
以下是类的注释。
@Slf4j
@Validated
@RestController
@RequestMapping("profile")
public class ProfileController {
...
}
最佳答案
问题是间歇性的。重新启动运行它的计算机后,问题消失了。
对于那些想知道的人来说,问题的根源在于线程泄漏。
关于java - Spring Controller 不被视为单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60213710/