Можно ли передать функцию в качестве значения в команду pod K8s для оценки? Я передаю аргументы JVM для установки параметра MaxRAM и хотел бы прочитать память cgroups, чтобы определить значение для аргумента

Это пример того, что я пытаюсь сделать

- command:
  - /opt/tools/Linux/jdk/openjdk1.8.0_181_x64/bin/java
  - -XX:MaxRAM=$(( $(cat /sys/fs/cgroup/memory/memory.limit_in_bytes) * 70/100 ))

К сожалению, вышеописанное не работает и завершается с ошибкой:

Improperly specified VM option 'MaxRAM=$(( $(cat /sys/fs/cgroup/memory/memory.limit_in_bytes) * 100 / 70 ))'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Это выполнимо? Если так, то как правильно это сделать? Спасибо!

0
frpet 30 Апр 2020 в 06:57

2 ответа

Лучший ответ

Это синтаксис оболочки, поэтому вам нужно запустить оболочку для его интерпретации.

command:
- sh
- -c
- |
  exec /opt/tools/Linux/jdk/openjdk1.8.0_181_x64/bin/java -XX:MaxRAM=$(( $(cat /sys/fs/cgroup/memory/memory.limit_in_bytes) * 70/100 ))
2
coderanger 30 Апр 2020 в 04:34

Разумно последние версии JVM имеют прямую поддержку для понимания ограничений памяти контейнера. Если вы можете обновить хотя бы Java 8u191, то он поддерживает текущий набор соответствующих параметров JVM. Вы можете установить:

- command:
  - /opt/tools/Linux/jdk/openjdk1.8.0_251_x64/bin/java
  - -XX:MaxRAMPercentage=70.0
1
David Maze 30 Апр 2020 в 16:02