我有这个非常简单的控制器。PlayFramework中控制器中的内存泄漏?
package controllers.WebService
import play.api.mvc.{Action, Controller}
object TestLeak extends Controller {
def index = Action {
Ok((1 to 100000).mkString)
}
}
我用我的浏览器打开它,我的系统中的内存消耗是2516MB。 每次刷新页面内存时,每次刷新时都会增加1-2MB。你可能会说这是浏览器的错误,但我从另一台电脑上得到了同样的结果。 ab bench也证实了这一点。 -c 100 -n 1000的内存消耗量为600MB。
和内存分配不降
使用System.gc()的解决了这个问题,但是后来我真的低性能。到底是怎么回事?
与Akka.future和scala.future和async相同的问题。没有包括其他进口或性状。就是你看到的。
我现在有这个问题一段时间了,无法在没有System.gc()的情况下部署到Heroku。任何解决方案其实JAVA_OPTS不使用的Heroku(愚蠢的我),你必须声明它Procfile
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} ...
JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -Dfile.encoding=UTF8
不是内存消耗
UPDATE 永远不会高于500(Heroku的限制)
感谢您的时间eveyone
如果GC之后内存回到初始状态,那么它不是内存泄漏,您可能需要微调JVM gc参数以避免性能问题 – 2013-02-12 13:51:28
“Java就像是阿尔茨海默氏症 - 它启动缓慢,然后占用所有内存”。 JVM以占用内存而闻名,并且不会将其还给系统。直到它实际上减慢了你的应用程序,调整GC可能实际上损害了它。 – 2013-02-12 15:01:31
@AloisCochard谢谢你, – weakwire 2013-02-12 15:09:57