Java
如何為主機上的每個新 Java 程序啟用 Java 代理?
我有一個 java 代理,我想為主機上執行的任意 java 程序自動啟用它。
我不能依賴別名或環境變數等
PATH
,JVM_OPTS
因為我希望任何 JVM 程序都能選擇代理,即使直接以/usr/bin/java -jar my-app.jar
.一種(相當骯髒的)方法是
java
用我的自定義 bash 腳本物理替換二進製文件,如下所示:#!/bin/bash $(dirname "$0")/java.original "-javaagent:path/to/my-agent.jar" "$@"
java
它有效,但這種方法需要重命名我想避免這樣做的原始二進製文件。問題:有沒有更好的方法如何在不接觸
java
二進製文件的情況下實現相同的行為?是否有任何全域 Java 特定配置文件,我可以在其中指示 Java始終使用給定代理執行?
有一個
JAVA_TOOL_OPTIONS
環境變數,可以/etc/profile.d
為所有使用者設置。export JAVA_TOOL_OPTIONS=-javaagent:path/to/my-agent.jar
然後每個 java 程序都會選擇它,不管它是如何啟動的。
從官方文件:
此環境變數允許您指定工具的初始化,特別是使用
-agentlib
or-javaagent
選項啟動本機或 Java 程式語言代理。在以下範例中,設置了環境變數,以便在啟動應用程序時啟動 HPROF 分析器:$ export JAVA_TOOL_OPTIONS="-agentlib:hprof"
此變數還可用於使用其他選項擴充命令行以用於診斷目的。例如,您可以提供 -XX:OnError 選項來指定發生致命錯誤時要執行的腳本或命令。
還有一個未記錄
_JAVA_OPTIONS
的變數優先於JAVA_TOOL_OPTIONS
和命令行參數,在某些情況下可能很方便。但是因為它已被棄用並且可能並非在所有 Java 發行版中都受支持,所以不建議使用它。