【问题标题】:Spring Boot App memory consumptionSpring Boot App 内存消耗
【发布时间】:2018-05-05 17:31:21
【问题描述】:

1) 我们是一个 Spring Boot/Java 8 应用程序,我们使用它运行 xms = 256 MB,xmx = 2 GB

2) 我们的发布工程师正在 unix 服务器上运行 TOP 命令, 应用程序正在运行并报告应用程序正在使用 3.5 GB

3) 当我使用 VisualVM 分析我们应用程序的生产 JVM 实例时, 我看到使用的堆大小仅显示大约 1.4 GB

对于为什么上面的#2 和#3 之间的内存消耗数字如此不同有什么想法吗?

感谢您的反馈。

【问题讨论】:

  • xmx 2 GB 表示您的应用程序在jvm 中获得最多 2 GB 的虚拟内存。因此,在主机 PC 中可能会更多。

标签: java spring-boot memory-management heap-memory


【解决方案1】:

-Xmx 参数仅设置 Java 的最大大小。 Java 堆外的任何内存都不受-Xmx 的限制/控制。

非堆内存使用示例包括线程堆栈、直接内存和 perm gen。

使用的总虚拟内存(由top 报告)是堆使用量(您使用-Xmx 设置上限)和非堆使用量(-Xmx 无法设置上限)的总和。

因此,#2 和 #3 中的数字不可比较,因为它们不是同一事物的测量值。

它们永远不会相同,但如果您想让它们彼此更接近(或者至少对使用的虚拟内存量有更多控制权),那么您可以考虑使用 ...

  • -XX:MaxPermSize 限制 perm gen 大小
  • -XX:MaxHeapFreeRatio 促进更积极的堆收缩

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 2019-01-16
    • 2020-01-06
    • 2016-05-03
    • 1970-01-01
    • 2022-01-24
    • 2021-06-05
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多