【发布时间】:2015-03-19 18:53:10
【问题描述】:
我们在 Heroku 上运行的 JVM 应用程序收到错误 R14 超出内存配额。
我们正试图了解内存的使用情况,但数字没有加起来。
在日志下方:
Process running mem=1174M(114.7%)
» 10:16:28.365 2015-01-21 09:16:28.099931+00:00 heroku web.1 - - Error R14 (Memory quota exceeded) Critical
» 10:16:43.322 2015-01-21 09:16:42.836517+00:00 app web.1 - - measure.mem.jvm.heap.used=272M measure.mem.jvm.heap.committed=546M measure.mem.jvm.heap.max=546M
» 10:16:43.322 2015-01-21 09:16:42.836583+00:00 app web.1 - - measure.mem.jvm.nonheap.used=106M measure.mem.jvm.nonheap.committed=107M measure.mem.jvm.nonheap.max=0M
» 10:16:43.322 2015-01-21 09:16:42.836644+00:00 app web.1 - - measure.threads.jvm.total=136 measure.threads.jvm.daemon=21 measure.threads.jvm.nondaemon=105 measure.threads.jvm.internal=10
» 10:16:43.322 2015-01-21 09:16:42.853114+00:00 app web.1 - - measure.mem.linux.vsz=2489M measure.mem.linux.rss=848M
Heroku 报告 1174M 正在被使用。 heroku-javaagent-1.4 报告其下方的指标,它们加起来为 546+107+136/2=721M。 1174-721=453M 的其余部分可以用在哪里?我们如何才能继续进行故障排除?
考虑到我们的 JVM 选项,我在这里计算了 136 个线程,每个线程有 512K 堆栈:
-javaagent:heroku-javaagent-1.4.jar=stdout=true,lxmem=true -Xms568m -Xmx568m -Xmn192m -Xss512k -XX:+UseCompressedOops
用于在 1024M 内存的 2 倍测功机上运行。
谢谢
【问题讨论】: