监控和限制 cloud foundry java 应用程序的内存使用
Monitoring and throttling on memory usage on cloud foundry java application
我需要限制托管在 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?)。当您 运行 函数查询内存使用情况时,它将 return 有关应用所在的整台机器或虚拟机的信息 运行ning。
在 Cloud Foundry 中,您可以通过查看 MEMORY_LIMIT
环境变量来获取应用程序的内存限制。我认为使用 MemoryMXBean,如 described here,将是获得当前使用情况的方式。然后,您可以从 MEMORY_LIMIT
中减去当前使用量,并估算出您与限制的接近程度。
请注意会有少量开销,因为 Cloud Foundry 运行 在您的容器中有几个小进程(主要是 pid-0 和 ssh)。虽然开销很小,我上次看的时候大概是25M左右。
我需要限制托管在 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?)。当您 运行 函数查询内存使用情况时,它将 return 有关应用所在的整台机器或虚拟机的信息 运行ning。
在 Cloud Foundry 中,您可以通过查看 MEMORY_LIMIT
环境变量来获取应用程序的内存限制。我认为使用 MemoryMXBean,如 described here,将是获得当前使用情况的方式。然后,您可以从 MEMORY_LIMIT
中减去当前使用量,并估算出您与限制的接近程度。
请注意会有少量开销,因为 Cloud Foundry 运行 在您的容器中有几个小进程(主要是 pid-0 和 ssh)。虽然开销很小,我上次看的时候大概是25M左右。