我需要限制 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 命令输出值?
最佳答案
在撰写本文时,JVM(java 8 和 9)不支持容器(不过这应该会在某个时刻发生,也许是 11?)。当您运行函数来查询内存使用情况时,它将返回与运行应用程序的整个计算机或虚拟机相关的信息。
在 Cloud Foundry 中,您可以通过查看 MEMORY_LIMIT
环境变量来获取应用程序的内存限制。我认为使用 MemoryMXBean,如 described here ,将是获取当前使用情况的方法。然后,您可以从 MEMORY_LIMIT
中减去当前使用情况,并大致了解与限制的接近程度。
请注意,由于 Cloud Foundry 在容器中运行几个小进程(主要是 pid-0 和 ssh),因此会产生少量开销。不过开销很小,我上次看的时候大概是 25M 左右。
关于java - 监控和限制 Cloud Foundry Java 应用程序的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52053833/