代码之家  ›  专栏  ›  技术社区  ›  Marcel Overdijk

Java堆+非堆总计*到目前为止未*超过512MB,但内存使用量>512MB会导致R14错误

  •  0
  • Marcel Overdijk  · 技术社区  · 7 年前

    查看Heroku上的堆和非堆内存使用情况以及总内存消耗,我看到了意想不到的结果。

    堆内存使用量约为175MB 约125MB的非堆内存使用率 总内存使用量:525MB

    编辑

    web java -Dserver.port=$PORT $JAVA_OPTS -jar build/libs/*.jar

    它使用的是JDK 11,没有任何特定的GC设置。

    enter image description here

    添加了总内存使用率图表。 注意,对于整个图形应用程序是“空闲”没有人在使用它,除了一些从我的网站请求的最小数量。

    将内存设置更改为-Xmx256m内存使用率会立即下降到400 MB。 将其更改为-Xmx272m,内存将增加到500MB。

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  0
  •   codefinger    7 年前

    175MB的 习惯于 堆只代表JVM在整个堆中使用的部分。如果您使用的是默认值,那么提交的堆可能是300MB(很遗憾,Heroku仪表板中没有显示这一点)。

    附加内存将来自以下内容:

    • 非堆(元空间、代码缓存等)
    • JNI(不受JVM管理的本机内存,请参阅 this blog
    • 外部进程(如果JVM启动任何其他JVM或非JVM进程,它将反映在总dyno内存中)

    我建议如下:

    • 降低堆大小(256MB就足够了)
    • 降低其他一些默认值( -XX:ReservedCodeCacheSize=50m -XX:MaxMetaspaceSize=80m
    • 减少任何线程池的大小(Tomcat?)