Рейтинг:0

Как включить java-агент для каждого нового java-процесса на хосте?

флаг jp

У меня есть агент Java, который я хочу автоматически включать для любого произвольного процесса Java, работающего на хосте.

Я не могу полагаться на псевдонимы или переменные среды, такие как ДОРОЖКА, JVM_OPTS и т. д., поскольку я хочу, чтобы любой процесс JVM выбирал агента, даже если он запускался напрямую как /usr/bin/java -jar my-app.jar.

Один (довольно грязный) способ сделать это физически заменить Ява двоичный файл с моим собственным сценарием bash следующим образом:

#!/бин/баш 
$(dirname "$0")/java.original "-javaagent:path/to/my-agent.jar" "$@"

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

Вопрос: Есть ли лучший способ добиться того же поведения, не касаясь Ява двоичный? Есть ли какой-либо глобальный файл конфигурации Java, в котором я мог бы указать Java для всегда работать с данным агентом?

флаг cn
Это лучше подходит для SO?
флаг jp
Возможно. Можно ли как-то перенести вопрос на SO или мне его там воссоздать?
флаг cn
У меня нет возможности переместить его, но не стесняйтесь делать кросспост, и мы можем пометить это как дубликат или связать ответ.
djdomi avatar
флаг za
просто отметьте свой вопрос самостоятельно, и он будет перемещен
Рейтинг:0
флаг jp

Существует JAVA_TOOL_OPTIONS переменная окружения, которую можно установить в /etc/profile.d для всех пользователей.

экспорт JAVA_TOOL_OPTIONS=-javaagent:path/to/my-agent.jar

Затем каждый процесс Java подхватит его, независимо от того, как он запущен.

От официального документация:

Эта переменная среды позволяет указать инициализацию инструментов, в частности, запуск агентов собственного языка или языка программирования Java с помощью -agentlib или же -javaагент параметры. В следующем примере переменная среды устанавливается таким образом, чтобы профилировщик HPROF запускался при запуске приложения:

$ экспорт JAVA_TOOL_OPTIONS="-agentlib:hprof"

Эту переменную также можно использовать для дополнения командной строки другими параметрами в диагностических целях. Например, вы можете указать параметр -XX:OnError, чтобы указать сценарий или команду, которые должны выполняться при возникновении фатальной ошибки.

Есть и недокументированные _JAVA_OPTIONS переменная, которая имеет приоритет над JAVA_TOOL_OPTIONS и аргументы командной строки, которые могут быть удобны в некоторых случаях.Но поскольку он устарел и может поддерживаться не во всех дистрибутивах Java, его не рекомендуется использовать.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.