我可以合理地期望哪些 Java -Xmx 设置可以在 AWS EC2 Ubuntu 服务器上运行?

我可以合理地期望哪些 Java -Xmx 设置可以在 AWS EC2 Ubuntu 服务器上运行?
  • 你的经验是什么?你能证实我的实验结果吗?
  • 我通常可以使用total RAM - 600 MB,或0.4 * total RAM吗?
  • 还是总是不断反复试验,并希望它足够低?

背景:我正在尝试在 T3 实例上设置 jenkins,并尝试使用 Ubuntu Server 16.04 和 18.04。

我从一个t3.micro实例(1 GB RAM)开始,但发现只要使用超过 ,OOM 终止程序就会终止我的 java 进程,-Xmx400m这似乎有点低。我原本希望能够使用更多,例如-Xmx750m

这是否意味着 Ubuntu Server 需要大约 600 MB 才能运行?

问题是,即使我将 -Xms 和 -Xmx 都设置为非常高的值(例如),java 进程也会启动。700m只有当我向网站发出第一个请求时,该进程才会被终止。

我现在尝试一个t3.small实例(2 GB RAM),但仍然不确定要配置什么。

在 Windows 上,它有点确定性:我将-Xms和设置-Xmx为相同的值。如果服务无法启动,则该值太高。如果服务成功启动,则该值没问题,并且内存已为我的进程保留。

背景信息:

答案1

如果您想在资源有限的环境中在 Linux 上运行任何应用程序,则应确保了解 Linux 上的内存实际工作方式。听起来很刺耳,但这确实是了解幕后情况的唯一方法。

如果 OOM 终止程序被触发,则意味着您首先耗尽了内存。如果在 -Xmx400 的情况下发生这种情况,那么这是该特定应用程序在特定环境中执行其特定操作的限制。

在您考虑将 vm.overcommit_memory 设置为非默认值之前,请确保您真正了解分配和使用内存之间的区别(就 Linux 虚拟内存系统而言)。否则,您将永远无法有效地使用系统的内存。

话虽如此,但默认值通常适用于 80%-90% 的使用情况。对于 Jenkins,内核中的默认值实际上应该相当好用。您将希望内核过度使用可用内存(这是默认值),并在实际用完时触发 OOM(也是默认值)。

如果这不适用于您可用的内存,您将需要更多内存。此外,设置应用程序不需要的较大 -Xmx 值也被认为是有害的,但您问的是 Linux 内存,而不是 Java 内存 :)

相关内容