运行Spring Boot应用程序的初始内存量

Car*_*rto 4 java spring tomcat spring-boot undertow

我应该设置什么初始内存来运行Spring Boot应用程序?

例如,要运行嵌入式Tomcat/Undertow应用程序,我们可以为-Xms和-Xmx java选项设置一个典型的内存量.

如何找出运行应用程序需要设置的值?

pcz*_*eus 10

您应该运行JavaMissionControl或其他Profiler来查看您的实际内存要求.您可以通过从命令提示符运行"jmc",然后附加到本地JVM,在安装了Java的服务器上(以及路径中)运行JavaMissionControl.您也可以连接到远程JVM.有关更多信息,请参阅此链接:http://www.oracle.com/technetwork/java/javaseproducts/mission-control/index.html

通常我所做的是将最大内存设置为高于所需,max = 1GB似乎是一个很好的起点.您将需要在典型活动期间查看应用程序的内存配置文件.实现当您将初始堆大小设置为64mb时,垃圾收集器正在运行一个方案,该方案在出于性能原因需要时才会启动主要垃圾收集(垃圾收集很昂贵).因此,您将看到内存随着时间的推移而上升到堆大小的80%左右(此百分比可调).达到阈值后,垃圾收集就会启动,您将看到使用过的JVM内存再次降低.

通常我正在寻找的是在一系列主要垃圾收集之后一直使用的内存级别.因此,在运行应用程序之后,您会看到主要垃圾回收后的固态内存使用率一直下降到40Mb左右.因此,我通常会将最小JVM大小设置为大约这个数量,因为我知道我总是至少需要这么多.

现在你知道了最低要求的一个不错的起点,那么所需的最大内存是多少?好吧,这需要更多的分析和反复试验.我所做的是开始将最大内存设置降低一段时间并降低轮廓.您正在寻找的是主要垃圾收集的频率以及JVM CPU利用率达到一致的高值.

我会不断减少内存,直到我看到在负载下短时间内发生了多次重大垃圾收集,并且在这些垃圾收集期间CPU飙升.一旦我看到这种行为,然后我慢慢增加最大内存,直到该行为停止,找到所需的最大内存的最佳位置.

这是一种非常简单的方法,可以为最小/最大内存设置找到合理的值,并且在大多数常见应用场景中都能很好地适用于我.如果您真的想要微调您的要求,当然还有许多其他更详尽的方法来分析您的应用程序以微调内存设置和垃圾收集方案/设置.