Spring Boot内存消耗增加超出-Xmx选项

时间:2015-06-29 21:20:57

标签: java spring spring-boot

我注意到Spring Boot应用程序不遵守通过Xmx选项设置的内存量。 例如:java -Xss64m -Xmx64m -jar test.jar

我还在控制台上打印了启动时应用程序真正使用的内存量,并显示: 最大内存:61M

long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");

当我在访问任何网页之前打开Windows进程时,它显示+ -105M,那么Java如何说61M?

访问任何网页后,它从+ -125M到+ -135M。为什么会有这样的增加?它应该给出" java.lang.OutOfMemoryError:PermGen space"但不要这样增加。

如果许多应用程序在服务器上的内存不足,这让我很担心。顺便说一句,我使用的是Java 1.8_45

1 个答案:

答案 0 :(得分:6)

在监控Spring Boot应用程序之后,我发现了一些可能的原因,例如:

  1. http线程数(Undertow每个启动大约50个线程 默认,但您可以通过属性增加/减少所需的线程数量)
  2. 通过JNI
  3. 访问本机例程(.dll,.so)
  4. 静态变量
  5. 使用缓存(memcache,ehcache等)
  6. 如果VM是32位或64位,64位使用更多内存来运行相同的应用程序,因此如果您不需要大于1.5GB的堆,那么请保持您的应用程序运行超过32位以节省存储器中。