Java

如何為主機上的每個新 Java 程序啟用 Java 代理?

  • December 23, 2021

我有一個 java 代理,我想為主機上執行的任意 java 程序自動啟用它。

我不能依賴別名或環境變數等PATHJVM_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 程序都會選擇它,不管它是如何啟動的。

從官方文件

此環境變數允許您指定工具的初始化,特別是使用-agentlibor-javaagent選項啟動本機或 Java 程式語言代理。在以下範例中,設置了環境變數,以便在啟動應用程序時啟動 HPROF 分析器:

$ export JAVA_TOOL_OPTIONS="-agentlib:hprof"

此變數還可用於使用其他選項擴充命令行以用於診斷目的。例如,您可以提供 -XX:OnError 選項來指定發生致命錯誤時要執行的腳本或命令。

還有一個未記錄_JAVA_OPTIONS的變數優先於JAVA_TOOL_OPTIONS和命令行參數,在某些情況下可能很方便。但是因為它已被棄用並且可能並非在所有 Java 發行版中都受支持,所以不建議使用它。

引用自:https://serverfault.com/questions/1087798