首页 > 解决方案 > playframework会在一定时间后释放内存吗?

问题描述

我是 Play Framework 的新手。我一直在生产模式下运行 Play Framework 2.7.x。实际上在最简单的代码中:

package controllers

import javax.inject._
import play.api._
import play.api.mvc._


@Singleton
class HomeController @Inject()(cc: ControllerComponents) extends   AbstractController(cc) {


def index() = Action { implicit request: Request[AnyContent] =>
Ok(views.html.index())
}
}

准备运行时,我注意到每个请求都会增加更多的内存使用量。它越来越多。在请求增加的阶段,应用程序使用的内存达到 1Gb。我停止发送请求,但我注意到应用程序没有释放任何内存。

我的问题是 - 这个应用程序会释放它占用的内存吗?有没有办法在不重新启动应用程序的情况下做到这一点?

标签: playframework

解决方案


Play Framework 在Java 虚拟机 (JVM)上运行。JVM 通常不会将内存释放回操作系统。内存可以被释放,但很少见,例如 Java 12 引入了JEP 346: Promptly Return Unused Committed Memory from G1但我不确定这对 1 GB 的小堆是否有用。

JVM 通常配置为具有内存消耗上限,并且会保持在该上限之下,或者OutOfMemoryError在不可能的情况下抛出各种问题。您应该配置 JVM,使其对您的服务器具有可接受的内存限制,并让 GC 完成工作。


推荐阅读