如何确定某个服务堆内存使用哪块内存?

How to determine which memory to use for a certain service heap memory?

我们有一个服务占用大约 600 MB 的堆。

我们目前的主机有 4 GB 内存。默认情况下,JVM 分配最大堆大小的 25%。所以我们得到 1 GB 的堆大小。

我们看到多次断电,我怀疑我们用于这些的内存不足。我添加了一个具有 8 GB 内存的主机,并将 CPU 数量增加了一倍,并且该主机从未断电,从而进一步加强了我的理论。

想了解占用 600MB 堆的进程的最佳内存值是多少。

还想了解增加堆大小的意义。

我尝试将初始堆大小增加到 2GB,但是当我将更改部署到主机时主机崩溃了。将堆大小增加到 1.5 GB 是否有意义?

感谢任何指点。

堆所需的确切内存量因应用程序而异 - 您最好尝试多种配置并自行查看。

但是,需要 4 GB 来存储大约 600 MB 的内容是很不寻常的。消耗主机内存的还有哪些?

请注意,JVM 使用的不仅仅是堆内存,而且不同应用程序之间的差异也很大。 对于 JVM 使用的各种内存类型的概述,我推荐这个优秀的答案:

最后,您可以通过 -XX:MaxRAMPercentage 标志调整默认分配策略(可用 RAM 的 25%)- 我通常将其设置为 60%,但一定要先测量!