我需要限制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 命令输出值?
答案 0 :(得分:1)
在撰写本文时,JVM(Java 8和9)不支持容器(尽管应该在某个时候发生,也许是11?)。当您运行用于查询内存使用情况的函数时,它将返回与运行该应用程序的整个计算机或VM有关的信息。
在Cloud Foundry中,您可以通过查看MEMORY_LIMIT
环境变量来获取应用程序的内存限制。我认为使用MemoryMXBean作为described here,将是获得当前使用率的方法。然后,您可以从MEMORY_LIMIT
中减去当前使用情况,并大致了解您与限制的距离。
请注意,这将产生少量开销,因为Cloud Foundry在您的容器中运行了几个小进程(主要是pid-0和ssh)。虽然开销很小,但我认为我上次大约是2500万。