私はこの非常にシンプルなコントローラーを持っています。
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ベンチはそれを確認します。-c 100 -n 1000は、600mbでメモリ消費を開始します。
そして、そのメモリ割り当ては決して下がらない
System.gc()を使用すると問題は解決しますが、パフォーマンスが非常に低くなります。何が起こっている?
Akka.futureとscala.futureとasyncでも同じ問題が発生します。他の輸入品や特性は含まれていません。ちょうどあなたが見るもの。
私はしばらくの間この問題を抱えており、System.gc()なしではHerokuにデプロイできません。解決策はありますか?
UPDATE実際にはJAVA_OPTSはheroku(愚かな私)によって使用されていません。Procfileに宣言する必要があります。
web: target/start -Dhttp.port=${PORT} ${JAVA_OPTS} ...
JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -Dfile.encoding=UTF8
メモリ消費量が500を超えることはありません(heroku制限)
時間をありがとうeveyone