【发布时间】:2014-07-26 23:23:53
【问题描述】:
我正在尝试在 Heroku 上部署非常简单的 Grails 2.3.7 应用程序(几个 REST 控制器和 Spring Security REST)并不断得到
Error R14 on Heroku (Memory Quota Exceeded)
Process running mem=906M(177.1%)
我的 BuildConfig.groovy 包含:
grails.project.fork = [
test: false,
run: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
war: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256, forkReserve:false],
console: [maxMemory: 768, minMemory: 64, debug: false, maxPerm: 256]
]
为什么 Grails 会消耗这么多内存,我该如何调整 BuildConfig.groovy 以适应 512mb Heroku 的限制?
UPD 问题可能出在我的 travis.yml 文件中吗?它看起来像这样:
language: groovy
jdk:
- oraclejdk7
before_script:
- chmod +x grailsw
script: ./grailsw clean
&& ./grailsw refresh-dependencies
&& ./grailsw test-app
before_deploy:
- chmod +x grailsw
deploy:
provider: heroku
app: igetit
on: develop
【问题讨论】:
-
我不确定,但可能是maxPerm(Perm Gen)和maxMemory(堆大小)加在一起了。这方面的一种方法可能是将 maxMemory 减少到 512,并将 maxPerm 保持在 256(也许您可以将其设置为 192 或其他值,但您必须在这里做一些实验)
-
我知道这很奇怪,但是在将 maxMemory 更改为 512 并重新部署内存使用量后变得更大:934M
-
您究竟是如何部署您的应用程序的?你在部署战争吗?你在跑跑战吗?还有什么?
-
我使用 Travis CI 的 Grails buildpack。它写了
./grailsw war,我想它会创建war文件并部署它 -
如果您使用
grails war,则不使用这些内存设置。它们仅用于分叉执行,例如在运行 test-app 或 run-war 时。您的内存设置可能由您的 JAVA_OPTS 控制。我对 Heroku 不熟悉,但你可以看看这里:stackoverflow.com/questions/15555108/heroku-jvm-tuning