【发布时间】:2018-10-18 11:05:41
【问题描述】:
查看 Heroku 上的堆和非堆内存使用情况以及总内存消耗,我看到了意想不到的结果。
堆内存使用量约为 175MB 非堆内存使用量约为 125MB 总内存使用量:525MB
由于总内存使用量超过 512MB,我收到 R14 错误并且内存使用率 > 100% (102.8%)。
这是预期的吗?
编辑
我没有使用自定义 Procfile,Heroku 仪表板显示以下用于启动测功机的命令:web java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/*.jar
它使用的是 JDK 11,没有任何特定的 GC 设置。
编辑 2
添加了总内存使用图。 整个图形应用程序的注意事项是“空闲”,除了来自我网站的一些最少请求之外,没有人使用它。
没有特定的内存设置(使用 Heroku 默认值)使用 525MB。 将内存设置更改为 -Xmx256m 内存使用量立即降至 400 MB。 将其更改为 -Xmx272m 内存将达到 500MB。
【问题讨论】:
-
您使用的是什么版本的 Java,您有哪些 GC 设置?如果您使用的是默认 GC 设置,请注明。
-
请注意,JVM 统计数据并不包括进程使用的所有内存。非堆通常意味着堆栈、字符串池、反射数据等(都与 Java 直接相关),但不是本机代码单独使用的内存(可能是 JVM 内部、文件句柄、dll 库等)
-
另外:“堆内存使用量约为 175MB”是指为堆保留 175MB 还是实际使用了 175MB(即填充了对象)?
-
我更新了关于 JDK 版本、GC 和启动命令的问题。希望有帮助。我认为托马斯的最后一个问题确实很有趣。也许 Heroku 指标仪表板只显示实际使用的内容,而不是保留的内容。不幸的是,我没有这样的 Heroku 经验。
-
我还添加了 Heroku 指标页面的屏幕截图。