我有这个非常简单的控制器。
package controllers.WebService
import play.api.mvc.{Action, Controller}
object TestLeak extends Controller {
def index = Action {
Ok((1 to 100000).mkString)
}
}
我用浏览器打开它,我系统中的内存消耗为 2516MB。每次我刷新页面内存时,每次刷新都会增加 1-2MB。您可能会说这是浏览器的错,但我从另一台 PC 上点击它并得到相同的结果。ab bench 也证实了这一点。-c 100 -n 1000 以 600mb 启动内存消耗。
而且内存分配永远不会下降
使用 System.gc() 解决了这个问题,但是我的性能真的很低。到底是怎么回事?
Akka.future 和 scala.future 和异步也有同样的问题。不包括其他进口或特征。就是你所看到的。
我有这个问题有一段时间了,没有 System.gc() 就无法部署到 Heroku。有什么解决办法吗?
更新实际上 JAVA_OPTS 不被 heroku 使用(我很傻)你必须将它声明给 Procfile
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} ...
JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -Dfile.encoding=UTF8
不是内存消耗永远不会超过 500(heroku 限制)
谢谢大家的时间