java - Spring Boot应用程序内存消耗

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

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 参数仅设置 Java 的最大大小。 Java 堆之外的任何内存都不受 -Xmx 限制/控制。

非堆内存使用的示例包括线程堆栈、直接内存和永久代。

使用的总虚拟内存(由 top 报告)是堆使用量(您已使用 -Xmx 限制)和非堆使用量(其中不能被 -Xmx 限制)。

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

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

  • -XX:MaxPermSize 限制永久代大小
  • -XX:MaxHeapFreeRatio 促进更积极的堆收缩

关于java - Spring Boot应用程序内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47426877/

相关文章:

java - Spring 3.5 如何将 HttpSessionEventPublisher 添加到我的启动配置

java - 什么是NullPointerException,我该如何解决?

java - 已知为 null 的值的冗余 nullcheck

maven - pom文件中可以指定多个主类吗?

java - 斯坦福解析器 : how to print also parsing tree and universal dependencies?

java - 如何在hibernate中设置第n页的权限和子权限?

java - 默认 @ContextConfiguration 有效,但手动设置时无效

java - 这两个 Java 代码哪个更快?

c - 为什么我们在用于内存测试的模式末尾找到 ULL?

Python——基于节点的集合内存分配