在shell脚本中,我设置了JAVA_OPTS环境变量(以启用远程调试并增加内存),然后按如下方式执行jar文件:
export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=n -Xms512m -Xmx512m"
java -jar analyse.jar $*
但是 JAVA_OPTS 环境变量似乎没有任何影响,因为我无法连接到远程调试,并且我看到 JVM 的内存没有变化。
可能是什么问题?
PS:我无法在
java -jar analyse.jar $*
命令中使用这些设置,因为我在应用程序中处理命令行参数。
您可以设置
_JAVA_OPTIONS
而不是 JAVA_OPTS
。这应该可以在没有 $_JAVA_OPTIONS
的情况下工作。
我不知道有哪个 JVM 会真正检查
JAVA_OPTS
环境变量。通常这用在启动 JVM 的脚本中,并且通常只是将其添加到 java
命令行中。
这里要理解的关键一点是,在
java
位之前-jar analyse.jar
的参数只会影响JVM,并且不会传递给您的程序。因此,将脚本中的
java
行修改为:java $JAVA_OPTS -jar analyse.jar $*
应该“只是工作”。
JDK_JAVA_OPTIONS
:这是从 Java 9 开始执行您想要的操作的推荐方法,请参阅 Oracle Java 9 文档中的使用 JDK_JAVA_OPTIONS Launcher 环境变量,以及此综合答案有什么区别使用 Java 11 时在 JDK_JAVA_OPTIONS 和 JAVA_TOOL_OPTIONS 之间?.
JAVA_OPTS
:它过去不是,现在也不是标准化选项。一些基于 Java 的工具的 shell 脚本包装器确实会对其进行评估,ZoogieZork 的答案中提供了一个说明其工作原理的示例。
_JAVA_OPTIONS
(由十六进制提及):它现在已弃用/未记录,请参阅
Oracle公告(“
Add a new launcher environment variable JDK_JAVA_OPTIONS
”部分)。