Мониторинг памяти Java-приложений внутри Cloud Foundry
У меня есть приложение 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-приложений, вы знаете, что в конечном итоге JVM, возможно, потребят столько памяти, сколько вы им сказали, что они могут иметь, даже если приложение Java не использует ее. (Другими словами, это делает свое собственное управление памятью.) Это означает, что фактическое java
процесс может потреблять всю 1 ГБ памяти, но это не значит, что ему не хватит памяти.
По моему опыту, полезный мониторинг использования памяти Java-приложения зависит от получения данных от самой JVM, через что-то вроде JMX (например, через jconsole
). Однако Cloud Foundry, похоже, не предоставляет информацию о том, где на самом деле работает приложение. (На самом деле я обнаружил, что некоторые люди утверждают, что Cloud Foundry явно не сообщит вам эту информацию.) И это означает, что мне некуда подключить клиент JMX.
Если я хочу отслеживать использование памяти моих приложений Java внутри Cloud Foundry, как мне это сделать? Не стесняйтесь опровергать любые мои претензии, если вы знаете лучше.