我有一个运行基于 Java 8 的服务器进程的 Ubuntu 18.04 VM 映像。在单核 EC2t2.small
实例(2GB RAM)上运行时,它的 RSS 起始值为 432M。在与双核(同样为 2GB RAM)运行完全相同的服务器映像时t3.small
,服务在启动时 RSS 会飙升至 876M。在 Java 10 上,差异更加明显:有时它从 1586M RSS 开始。性能会受到明显影响。
任何时候都不会使用任何交换。
完全相同的服务器映像,结果却大不相同。唯一重要的变量似乎是核心数量。
然而,在运行jmap
查看堆的使用情况后,我注意到 RSS 下降了一半,大约是我预计的 t2 上的情况。堆转储显示 t2 或 t3、Java 8 或 Java 10 之间的实际分配没有实际差异。
所以,我想知道:这是 JVM 还是 OS 的行为不同?我知道我可以MaxHeapFreeRatio
让 JVM 更快地释放内存,但这是 JVM 对内存状况做出的反应,还是 OS 做出的反应?