我有一个 Java 应用程序,正在 Cloud Foundry 环境中部署。我想监视该应用程序的内存使用情况。Cloud Foundry 提供了cf app
生成有关指定应用程序的每个实例的输出的命令。在这里,您可以看到有关具有两个正在运行的实例的特定应用程序的信息(已删除):
$ cf app myapp
Showing health and status for app myapp in org myorg / space myspace as admin...
OK
requested state: started
instances: 2/2
usage: 1G x 2 instances
urls: myapp.example.com
last uploaded: Wed Jan 27 09:00:53 UTC 2016
stack: mylinuxstack
buildpack: myjavabuildpack
state since cpu memory disk details
#0 running 2016-01-27 09:01:31 AM 0.4% 689.8M of 1G 0 of 1G
#1 running 2016-02-03 05:35:03 PM 0.0% 624.2M of 1G 0 of 1G
但是,内存指标似乎只是报告 Cloud Foundry 容器内运行的进程使用的内存量。如果您曾经监控过 Java 应用程序,那么您就会知道,即使 Java 应用程序没有使用内存,JVM 最终也可能会消耗您告诉它们可以使用的内存量。(换句话说,它自己进行内存管理。)这意味着实际java
进程可能会消耗其全部 1GB 内存,但这并不意味着它即将耗尽内存。
根据我的经验,对 Java 应用程序内存利用率的有效监控取决于从 JVM 本身获取数据,通过 JMX 之类的方式(例如 via jconsole
)。但是,Cloud Foundry 似乎不提供有关应用程序实际运行位置的信息。(事实上,我发现有些人声称 Cloud Foundry 明确不会告诉您该信息。)这意味着我无处连接 JMX 客户端。
如果我想监控 Cloud Foundry 中 Java 应用程序的内存使用情况,我该怎么做?如果您有更好的了解,欢迎反驳我的任何说法。
答案1
我能够通过查询 Cloud Foundry 的(Go)路由器的/routes
URL。