监控和限制Cloud Foundry Java应用程序上的内存使用情况

时间:2018-08-28 08:54:35

标签: java spring spring-boot cloudfoundry

我需要限制CloudFoundry上托管的应用的使用。

为此,我的Java代码具有存储以下内容的变量

long L1 = Runtime.getRuntime().freeMemory();
long L2 = Runtime.getRuntime().totalMemory();
long L3 = Runtime.getRuntime().maxMemory();

但是,当我在cmd上使用命令 cf app 并尝试获取该值时,它与L1,L2,L3三个值中的任何一个都不相近。那么如何在Java代码中获取 cf app 命令输出值?

1 个答案:

答案 0 :(得分:1)

在撰写本文时,JVM(Java 8和9)不支持容器(尽管应该在某个时候发生,也许是11?)。当您运行用于查询内存使用情况的函数时,它将返回与运行该应用程序的整个计算机或VM有关的信息。

在Cloud Foundry中,您可以通过查看MEMORY_LIMIT环境变量来获取应用程序的内存限制。我认为使用MemoryMXBean作为described here,将是获得当前使用率的方法。然后,您可以从MEMORY_LIMIT中减去当前使用情况,并大致了解您与限制的距离。

请注意,这将产生少量开销,因为Cloud Foundry在您的容器中运行了几个小进程(主要是pid-0和ssh)。虽然开销很小,但我认为我上次大约是2500万。