Мониторинг и регулирование использования памяти в облачном литейном Java-приложении - PullRequest
0 голосов
/ 28 августа 2018

Мне нужно ограничить использование приложения, размещенного на CloudFoundry.

Для этого в моем Java-коде есть переменные, в которых хранится следующее

long L1 = Runtime.getRuntime().freeMemory();
long L2 = Runtime.getRuntime().totalMemory();
long L3 = Runtime.getRuntime().maxMemory();

Однако, когда я использую команду cf app в cmd и пытаюсь получить значение, оно нигде не близко ни к одному из трех значений L1, L2, L3. Итак, как я могу получить значение вывода команды cf app в моем коде Java?

1 Ответ

0 голосов
/ 31 августа 2018

На момент написания статьи JVM (java 8 и 9) не была осведомлена о контейнере (хотя это должно произойти в какой-то момент, может быть, 11?). Когда вы запускаете функции для запроса использования памяти, он возвращает информацию, относящуюся ко всей машине или виртуальной машине, на которой запущено приложение.

В Cloud Foundry вы можете получить лимит памяти для вашего приложения, посмотрев на переменную окружения MEMORY_LIMIT. Я думаю, что использование MemoryMXBean, как описано здесь 1005 *, было бы способом получить текущее использование. Затем вы можете вычесть текущее использование из MEMORY_LIMIT и получить приблизительную оценку того, насколько вы близки к пределу.

Просто отметьте, что издержки будут незначительными, так как Cloud Foundry запускает несколько небольших процессов в вашем контейнере (в основном pid-0 & ssh). Накладные расходы довольно маленькие, хотя, я думаю, это было около 25 м в последний раз, когда я смотрел.

...