我有一个在 Cloud Foundry 环境中部署的 Java 应用程序。我想监控应用程序的内存使用情况。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 应用程序的问题,您就会知道 JVM 最终可能会消耗您告诉它们可以拥有的内存量,即使 Java 应用程序没有使用它。(换句话说,它自己进行内存管理。)这意味着实际java
进程可能正在消耗它的全部 1GB 内存,但这并不意味着它即将耗尽内存。
根据我的经验,对 Java 应用程序内存利用率的有用监控取决于从 JVM 本身获取数据,通过 JMX 之类的东西(例如 via jconsole
)。但是,Cloud Foundry 似乎没有提供有关应用程序实际运行位置的信息。(事实上,我发现有些人声称 Cloud Foundry 明确不会告诉您这些信息。)这意味着我无处可连接 JMX 客户端。
如果我想监控 Cloud Foundry 中 Java 应用程序的内存利用率,我应该怎么做?如果您知道得更多,请随时反驳我的任何主张。
我能够通过查询 Cloud Foundry 的(Go)Router's
/routes
URL找到与实例的直接连接。