playframework - 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。我停止发送请求,但我注意到应用程序没有释放任何内存。
我的问题是 - 这个应用程序会释放它占用的内存吗?有没有办法在不重新启动应用程序的情况下做到这一点?
解决方案
Play Framework 在Java 虚拟机 (JVM)上运行。JVM 通常不会将内存释放回操作系统。内存可以被释放,但很少见,例如 Java 12 引入了JEP 346: Promptly Return Unused Committed Memory from G1但我不确定这对 1 GB 的小堆是否有用。
JVM 通常配置为具有内存消耗上限,并且会保持在该上限之下,或者OutOfMemoryError
在不可能的情况下抛出各种问题。您应该配置 JVM,使其对您的服务器具有可接受的内存限制,并让 GC 完成工作。
推荐阅读
- excel - 自动电子邮件和 Excel 公式出错将不起作用
- python - 4x4 矩阵,对角线为 1(如十字),其他地方为 0,使用 python
- javascript - 根据复选框的状态在 OnChange 上反应 URL 重定向
- javascript - 如何在 React JS 中使用复选框和映射创建动态数组?
- java - 为什么我必须输入“字符串中的第一个唯一字符”问题?
- excel - 替换代码行中的特定元素
- c# - C#异步等待不起作用winforms ui冻结
- javascript - 移动 Safari 图像捕获的替代方案
- algorithm - Dijkstra 的双向实现
- java - android中有什么方法可以让我在android中同时播放两个音频?一个在我的应用程序上,一个在另一个后台应用程序上