我们有一个在堆中消耗约600 MB的服务。
我们目前拥有的主机有4 GB内存。默认情况下,JVM分配最大堆大小的25%。因此,我们获得了1 GB的堆大小。
我们看到了多个停电,我怀疑我们为这些停电提供的内存越少。我添加了一个具有8 GB内存的主机,并将CPU数量增加了一倍,该主机从未停电,从而进一步加强了我的理论。
希望了解占用600MB堆的进程的最佳内存值是多少。
还想了解增加堆大小有多大意义。
我尝试将初始堆大小增加到2GB,但是当我将更改部署到主机时,主机崩溃了。将堆大小增加到1.5GB是否有意义?
感谢您的指点。
1条答案
按热度按时间fnx2tebb1#
堆所需的确切内存量与应用程序非常相关-您最好尝试多个配置并自行查看。
但是,对于消耗大约600 MB的东西来说,需要4 GB是相当不寻常的。还有什么东西消耗主机内存呢?
注意JVM使用的不仅仅是堆内存,而且不同的应用程序使用的内存也会有很大的不同。要了解JVM使用的各种类型的内存,我推荐下面这个很好的答案:Java使用的内存远远超过堆大小(或大小正确的Docker内存限制)
最后,您可以通过
-XX:MaxRAMPercentage
标志调整默认分配策略(可用RAM的25%)-我通常将其设置为60%,但首先要确定度量!