Spring Boot App内存消耗

时间:2017-11-22 04:35:05

标签: java spring-boot memory-management heap

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之间如此不同的任何想法?

感谢您的反馈。

1 个答案:

答案 0 :(得分:1)

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

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

使用的总虚拟内存(由top报告)是堆使用量(使用-Xmx限制)和非堆使用量(不能被{{1限制)的总和}})。

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

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

  • -Xmx限制perm gen size
  • -XX:MaxPermSize以促进更积极的堆缩减