我们在单个 EC2 上运行了 4 个 Java 程序。由于 JVM 人机工程学,每个程序默认的最大堆大小为机器内存的 25%,这会导致内存使用率过高。我不想使用 -Xmx 来设置最大堆大小,因为启动这些程序的 systemd 脚本用于我们的开发和生产 EC2,它们的内存量差别很大。
我倾向于使用 -XX:MaxRAMPercentage,这样堆将根据 EC2 的大小进行缩放,我可以为较小的程序分配 10%,为繁忙的程序分配 50%。但我见过的大多数文档都建议明确控制堆大小。有什么建议吗?
答案1
在启动这些 Java 进程的脚本中,获取计算机上安装的总内存,并将其乘以要分配给该特定进程的系数。例如,在一台 16GB 的计算机上,您要为该进程分配 50% 的 RAM。
分配内存 = 16 * 0.5 = 8
在 Java 进程的 -Xmx${allocRam} 参数中使用此值。这应该适用于开发和生产环境。