当前位置: 首页 > 知识库问答 >
问题:

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

况经纬
2023-03-14

我注意到Spring Boot应用程序不服从通过Xmx选项设置的内存量。例如:java-Xss64m-Xmx64m-jartest.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空间”,但不要这样增加。

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

共有1个答案

赖翰
2023-03-14

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

  1. 超文本传输协议线程数(Undertow每个默认启动大约50个线程,但是你可以通过属性增加/减少所需的线程数)
  2. 通过JNI访问本地例程(. dll,. so)
  3. 静态变量
  4. 缓存的使用(Memacecch, ehacecch等)
  5. 如果VM是32位或64位,64位将使用更多内存来运行相同的应用程序,因此如果您不需要大于1.5GB的堆,请保持应用程序运行超过32位以节省内存
 类似资料:
  • 我有一个非常简单的Web服务器类(基于JavaSE的类)。 当我使用此命令启动编译后的类以限制内存使用时:

  • 我正在docker中运行一个java进程。我已经设置了xms(388m)和xmx(388m)。在应用程序启动后的某个时候,容器的内存消耗超过并达到了大部分~主机内存大小,容器被杀死。 < li >当我使用jprofiler连接到java进程时,我看到堆小于Xmx < li >但是,容器内顶部的命令显示< code>docker stats显示的内容 < li >当我在主机上运行相同的java进程时

  • 关于Java应用程序使用的驻留内存,我有两个问题。 一些背景细节: 我用-xms2560m-xmx2560m设置了一个java应用程序。 java应用程序在容器中运行。k8s允许容器最多消耗4GB. 堆:应用程序的工作方式似乎是使用所有内存,然后释放,然后使用等等。 这张快照说明了这一点。Y列是空闲堆内存。(由应用程序通过)提取) 我还可以使用HotSpotDiagnosticMXBean来确认它

  • 我编写的java应用程序遇到了一个问题,导致硬件性能问题。问题(我很确定)是,我运行应用程序的一些机器只有1GB的内存。当我启动java应用程序时,我将堆大小设置为-xms512m-xmx1024m。 我的第一个问题是,我的假设是否正确,因为我将机器的所有内存分配给java堆,这显然会导致性能问题?

  • 我有一个springboot REST服务,它每分钟将文件从文件夹移到zip归档,并将归档上传到另一个服务。我的服务使用Cache2K和Hsql数据库保存压缩文件和压缩名称的映射。另一个应用程序使用service注册创建的文件,然后询问文件所在的zip的名称。 服务在Windows Server 2019标准32GB RAM上运行,启动参数为

  • 问题内容: 我在增加PHP作为Apache模块的内存限制时遇到问题。 如果我将以下指令放入Apache配置中,则可以正常运行: 但是超过2GB无效,它将恢复为128MB。 这里有什么问题?我需要更多内存来完成一些与PDF相关的任务。 服务器为Debian 2.6.32-5-amd64#1 SMP,PHP 5.3.3-7 + squeeze13,具有12GB物理RAM。 问题答案: 您是否尝试过使用